SSMS允许表中存在重复记录,但不允许后续更新 [英] SSMS permits duplicate records in a table, but not subsequent updates

查看:28
本文介绍了SSMS允许表中存在重复记录,但不允许后续更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编辑:当我说"SQL Server"时,我实际上是指Management Studio。如果这让人困惑,我深表歉意。

哦,我讨厌这样的事情发生。昨天我在使用SQL Server,并尝试使用Pivot命令,试图弄清楚它是如何工作的。因此,我创建了一个包含四列的新表,第一列将具有与前几行相同的值。

我将"value1"添加到第一行,第一列,然后按Enter-因为还没有添加键或约束,所以它允许我向下输入到下一行,第一行上的其他列都是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行中的数据……更新或删除的行值不会使该行唯一,或者它们会更改多行(4行)。"

换句话说,SQL Server允许我输入重复的行,但是当我试图更新行以使其唯一时,它不允许我这样做,理由是有重复的行。最糟糕的是,我甚至无法删除任何行(我收到了相同的错误消息)。我曾经在此场景中找到的唯一解决方案是删除表并重新开始-这太荒谬了。

我的问题是,这种行为如何存在于一个经过十多年发展的知名程序中?我是不是那个愚蠢的人,我应该接受SQL Server的行为?对我来说,这是不可接受的,SQL Server一开始就不应该允许我输入重复的行,或者它应该允许我更新重复的行,直到它们都是唯一的,然后再尝试保存。

这绝不意味着是某种SQL Server讨厌的帖子。我很少会遇到这样的行为,但当我这样做的时候,它真的会让我落后,让我发疯。我就是不明白为什么程序里有这样的行为。比如,如果它不打算让我修复它,那么为什么它一开始就让我输入重复的行呢?

我记得以前使用MS access时,我会遇到同样奇怪、过时的行为。有几次,我不得不复制出大量数据,重新创建表,然后将其复制回来,仅仅是因为Access允许我做一些它不应该做的事情,并且现在阻止我进行任何更改来修复它-有效地产生了死锁。

那么这是怎么回事?在接近SQL Server时,我是否需要进行某种范式更改?问题出在我还是SQL Server?(你可以说是我,我可以接受。)

sql

Management Studio所做的全部工作就是提供一个UI来为您创建一些推荐答案,并对数据库运行它。

在您的示例中,每次添加一行时,它都会生成一条INSERT语句。这是完全有效的。

当您随后尝试使用UI从所有重复记录中删除或更新单个记录时,它无法生成执行此操作的SQL。原因是,由于表上没有键,因此无法生成表示您试图更新或删除的记录的WHERE子句。

对我来说,这是"错误"消息听起来非常清楚和有效。

至于您的评论:

令我惊讶的是,它还让我 在第二行输入"value1",然后 输入DOWN-这应该是不可能的 因为现在有两个完全相同的 排好了。但是,因为我刚刚 胡闹,这并没有让我感到困扰。

显然这很奇怪 关系理论,但我并不是真的 小心点,因为这只是一张桌子 创建的目的是胡乱操作。

拥有一个允许重复的数据库表没有什么错,如果您需要的话,这是非常合理的做法。至于你允许重复而不"在意"或"烦恼"。这就是错误所在。这时您应该已经意识到您忘记添加主键了。

这篇关于SSMS允许表中存在重复记录,但不允许后续更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆