2013-03-18 126 views
3

我对SQL很新,很抱歉问这是非常基本的知识。我的问题如下。插入SQL Server 2008之前的触发器

我有一个表叫minimumValmaximumVal是两列。 minimumVal始终应该小于maximumVal。在将新记录插入表格之前,我想检查一下。如果这种情况失败,数据不应该插入到数据库中。

所以根据我的理解,我虽然有一个触发器,但不知道如何写这个。

这是我写的目前为止;

CREATE TRIGGER tr_Group 
ON Table_Group 
for INSERT 
AS 
???? 

请指教。

+1

在这种情况下更好的解决方案是['CHECK '约束](http://msdn.microsoft.com/en-us/library/ms188258(v = sql.100).aspx)。并且SQL Server没有触发器之前,只有[INSTEAD OF触发器](http://msdn.microsoft.com/en-us/library/ms175521(v = sql.100).aspx)。 – Pondlife 2013-03-18 20:15:04

回答

15

我建议你使用check constraints此:

ALTER TABLE dbo.Table_Group ADD CONSTRAINT CK_Group 
    CHECK (minimumVal < maximumVal) 

如果您仍然希望使用触发器,那么你需要一个INSTEAD OF trigger

CREATE TRIGGER tr_Group ON Table_Group 
INSTEAD OF INSERT 
AS 
BEGIN 
SET NOCOUNT ON 
    INSERT INTO dbo.Table_Group 
    SELECT * 
    FROM INSERTED 
    WHERE minimumVal < maximumVal 
END 
+1

Thanks.It工作。我用'检查约束'。如果检查约束失败,是否有任何方法来设置操作(例如:显示错误消息)。 – 2013-03-18 20:22:27

+1

@NewDeveloper - 触发器可以检查违反规则的数据并使用[RaIsError](http://msdn.microsoft.com/en-us/library/ms178592(v = sql.100).aspx)来表示它的不快。 – HABO 2013-03-18 21:03:04

+0

@ HABO-感谢您的回答。 – 2013-03-20 19:26:52