触发和标识导致“更新或删除行值不会使行唯一或更改多行”错误在更新期间

时间:2017-12-27 09:56:21

标签: sql sql-server sql-server-2008 triggers visual-c#-express-2010

我使用Visual C#2010 Express在SQL Server 2008中创建表。列定义如下:

SEQ -- type int, primary key, don't allow nulls
STID -- type int, don't allow nulls
CCODE -- type int, don't allow nulls
SCORE -- type int, don't allow nulls
ADDTIME -- type datetime, allow nulls

然后我将SEQ的“Is Identity”标志设置为YES,将种子设置为10001,将增量设置为1。

接下来,我为这个表添加一个触发器:

ALTER TRIGGER TRIG_ENROLL
ON dbo.ENROLL
FOR INSERT, UPDATE
AS
BEGIN
    UPDATE t
    SET ADDTIME = GETDATE()
    FROM [dbo].[ENROLL] t
    JOIN inserted i ON i.SEQ = t.SEQ
END

最后,我使用“Show Table Data”界面将数据直接添加到表中。插入记录是可以的,因为在键入数据后ADDTIME和SEQ会自动填充,右键单击该行并选择执行SQL。但是,当我更新现有记录的SCORE列时,出现以下错误:

  

更新或删除的行值不会使行唯一,也不会改变多行(2行)

我怀疑它是导致问题的SEQ和触发器。当我删除触发器时,更新记录不会导致任何错误。但是错误是什么?

事实上,一个陌生的事情是,当我尝试使用另一台计算机并执行相同的过程(构建表,添加触发器,插入记录,然后更新它们)时使用相同的软件,错误不会发生。这是我忽略的某种设置问题吗?

0 个答案:

没有答案