我使用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和触发器。当我删除触发器时,更新记录不会导致任何错误。但是错误是什么?
事实上,一个陌生的事情是,当我尝试使用另一台计算机并执行相同的过程(构建表,添加触发器,插入记录,然后更新它们)时使用相同的软件,错误不会发生。这是我忽略的某种设置问题吗?