编辑:当我说“ SQL Server”时,我实际上是在谈论Management Studio。 抱歉,这令人困惑。
哦,我讨厌这种事情发生。昨天我在使用SQL
Server,并尝试使用PIVOT命令来弄清楚它是如何工作的。因此,我创建了一个包含四列的新表,第一列的前几行将具有相同的值。
我在第一行,第一列中添加了“
value1”,然后按回车键–因为还没有添加任何键或约束,它使我可以向下一行进入第一行,而对于第一行中的其他列则为NULL。美好的)。令我惊讶的是,它还允许我在第二行中输入“
value1”并向下输入-这应该是不可能的,因为现在有两个相同的行。但是,由于我只是在四处乱逛,所以这并没有打扰我。因此,我将继续创建四行,如下所示:
表格1
Col1 Col2 Col3 Col4
---------------------------------
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Value1 NULL NULL NULL
显然,这很奇怪,并且打破了关系理论,但是我并不是很在乎,因为这只是我创建的一张桌子。但是,我接下来就要发生什么了。输入这些数据后,我无法对表做 任何事情
。如果我尝试在任何行上填写col2,col3或col4,SQL
Server会因为重复行而对我大喊:“没有更新行。未提交第1行中的数据…。行值(s)更新或删除后,该行要么不唯一,要么更改了多行(4行)。”
因此,换句话说,SQL
Server允许我输入重复的行,但是当我尝试更新行以使其唯一时,它却不允许我输入,理由是存在重复的行。最糟糕的部分是我什至都无法删除任何行(我得到相同的错误消息)。在这种情况下,我发现的唯一解决方案是删除表并重新开始-
这太荒谬了。
我的问题是,这种行为如何在已经发展了十年的知名程序中存在?我是一个没有头脑的人,我应该接受SQL Server的行为吗?对我来说,这是不可接受的,SQL
Server应该永远不允许我首先输入重复的行,或者应该允许我更新重复的行,直到它们都是唯一的,然后再尝试保存。
这绝不是要成为某种SQL
Server讨厌的帖子。我碰到这种行为的情况相对很少见,但是当我这样做时,它真的会让我落后并让我发疯。我只是不明白为什么该程序具有这样的内置行为。就像为什么在世界上,如果它不打算让我修复它,让我首先输入重复的行?
我记得当初使用MS
Access时,会遇到相同的奇怪,过时的行为。几次,我不得不复制大量数据,重新创建表,然后再复制回去,因为Access允许我做它不应该做的事情,现在阻止我进行任何更改来修复它-
有效产生僵局。
那么这是怎么回事?接近SQL Server时是否需要某种形式的更改?是我还是SQL Server出了问题?(您可以说是我,我可以接受。)
Management Studio所要做的就是提供一个UI为您创建一些SQL并在数据库上运行它。
对于您的情况,每次添加一行时,它都会产生一个INSERT语句。这是完全正确的。
然后,当您尝试使用UI从所有这些重复的记录中删除或更新单个记录时,它无法生成SQL来做到这一点。原因是,由于表上没有键,因此无法生成WHERE子句,该子句表示您尝试进行UPDATE或DELETE的记录。
它的“错误”消息对我来说听起来很清楚且有效。
至于你的评论:
令我惊讶的是,它还允许我在第二行中输入“ value1”并向下输入-
这应该是不可能的,因为现在有两个相同的行。但是,由于我只是在四处乱逛,所以这并没有打扰我。显然,这很奇怪,并且打破了关系理论,但是我并不是很在乎,因为这只是我创建的一张桌子。
具有允许重复的数据库表没有什么错,如果您需要的话,这是一件非常有效的事情。至于不“关怀”或“受孕”,则您允许重复。那就是错误所在。然后,您应该意识到自己忘记了添加主键。
问题内容: 我似乎无法使实例正常工作。我使用的代码如下: 子类 该代码输出 问题答案: 您需要覆盖。而不是这样做,您实现了一个带有signature 的方法。因此,您使用的是为相等性测试定义的默认方法。 默认实现基于对象标识,因此,该集合“允许”您添加两个在语义上相等的不同对象。
我正在检查< code>HashSet的< code>add方法。有人提到 如果该集合已经包含元素,则调用保持集合不变,并返回false。 但是方法在内部保存中的值 的方法声明 将指定值与该映射中的指定键相关联。如果映射先前包含该键的映射,则旧值将被替换。 那么,如果 的 方法替换了旧值,那么 方法如何在元素重复的情况下保持集合不变?
问题内容: 是否可以授予用户查看权限,但不能更改或删除。 目前,我所看到的唯一权限是“添加”,“更改”和“删除” …,但是其中没有“读取/查看”功能。 我确实需要这样做,因为有些用户只能查看管理面板,以查看已添加的内容。 问题答案: 在admin.py中 有了这个: 然后通过删除以下行来删除提交按钮:
问题内容: 我在这里的研究中得到了不同的答案。 有人可以验证Redis服务器只能存储任何数值的表示吗? 例如,如果我在lpush中使用具有双重类型的Java客户端(Jedis),在发送给Redis之前是否需要将其转换为等效于字符串类型的内容? 还是有一种方法可以发送诸如double之类的实际数字类型?如果是这样,是否有任何示例代码说明了如何实现此目的? 谢谢 问题答案: Redis将所有内容存储在
问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您
这可能是一个复制品。但是经过一天的研究,我希望你能宽大处理。这是一个关于协方差的问题。 为什么我能这么做? 但不能这样做吗? 我读了一些关于协方差的讨论。 “C#中的协方差” “将列表转换为接口列表” “转换列表到接口列表” 我的理解是,我不能将狗的名单添加到动物名单中,因为这样我就可以将猫添加到动物名单中,这将是危险的。但是在动物列表中添加一个猫或狗的例子也同样危险,不是吗?在我看来,C#还没有