2013-03-18 51 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