编辑:当我说“SQL Server”时,我真的在谈论Management Studio。对不起,如果这是令人困惑。SSMS允许在表中重复记录,但不允许后续更新
哦,我讨厌这样的事情发生。我昨天正在使用SQL Server,并尝试使用PIVOT命令来试图弄清楚它是如何工作的。所以我创建了一个包含四列的新表,第一列将在前几行中具有相同的值。
我将“value1”添加到第一行,第一列,然后敲入enter - 正弦没有任何键或约束已添加,它允许我进入下一行,其中第一列的其他列行(这很好)。令我惊讶的是,它还允许我在第二行输入“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 hating post。我遇到这样的行为比较少见,但是当我这样做时,它真的让我落后并让我发疯。我只是不明白为什么这个程序有像这样内置的行为。就像为什么在世界上它让我首先输入重复行,如果它不打算让我修复它?
我记得当天在MS Access中工作,我会遇到同样的奇怪的古老行为。有几次,我不得不复制大量的数据,重新创建表格,并将其复制回来,因为Access允许我做一些它不应该做的事情,并且现在阻止我进行任何修改来修复它 - 有效地产生僵局。
那么是什么回事?在接近SQL Server时是否需要某种范式更改?这是我还是SQL Server? (你可以说这是我,我可以接受。)
是的,我认为这是我的问题。我在脑海中想到SSMS与实际的服务器密切相关,但它实际上是发送和接收SQL语句,就像我为我的数据库编写的任何应用程序一样。 – JoeCool 2009-07-07 15:29:06