SQL 2012微软触发器

时间:2013-09-02 12:27:12

标签: sql-server tsql triggers

任何想法如何创建一个后触发器,其中每个用户每次放入一次数据。例如。如果有人输入一次,那么它将被执行。但第二次我想说'错误信息'

表格我有一个用户表,日期和响应。表名是userresponse

到目前为止,这是我的编码

CREATE TRIGGER [dbo].[prevent_multiple_entry] ON [dbo].[userresponse]
FOR INSERT
AS
IF EXISTS (SELECT Users FROM userresponse) 

BEGIN 
  PRINT 'Error message'
RAISERROR('Each user can only submit to the same question once ',16,1)
ROLLBACK
END

1 个答案:

答案 0 :(得分:0)

试试这个:

CREATE TRIGGER [dbo].[prevent_multiple_entry] ON [dbo].[userresponse]
FOR INSERT
AS
BEGIN
  IF EXISTS(SELECT * FROM userresponse AS U, INSERTED AS I WHERE U.User = I.User) 
  BEGIN 
    RAISERROR('Each user can only submit to the same question once ',16,1)
    ROLLBACK TRANSACTION
  END
END

确保'嵌套触发器'和recursive_triggers设置是合适的,并考虑一下触发器不会检查该表中所有现有数据的事实。

设置交易隔离级别SNAPSHOT设置了一个漏洞,请小心。

您还可以定义CONSTRAINT ...