2013-05-29 143 views
0

我是一名在SQL Server 2005中執行項目的學生。我正在嘗試編寫一個過程來爲ID生成並插入主鍵。我想過一個插入觸發器之前,但我得到錯誤。有人可以幫助我..這是我到目前爲止:觸發SQL Server 2005之前

CREATE TRIGGER Create_ResourceID 
ON Resource 
before INSERT 
AS 
    DECLARE @resourceid INT 
    SELECT @resourceid = (max(ResourceID) + 1) FROM Resource 
GO 

INSERT INTO Resource(ResourceID) VALUES (@resourceid); 
+0

你得到什麼錯誤?順便說一句,我認爲你需要縮進你的代碼的第一行(開始'CREATE TRIGGER',但我不能在縮進中編輯,因爲StackOverflow告訴我需要改變至少6個字符,而縮進只有4個! – nurdglaw

+1

SQL Server沒有任何'BEFORE'觸發器,只是不存在,您需要使用'INSTEAD OF INSERT'觸發器。 –

+0

爲什麼不使用['IDENTITY'](http:/ /msdn.microsoft.com/en-us/library/ms186775(v=sql.90).aspx)列?它避免了您似乎註定要體驗的競爭條件的所有變化,不需要觸發器,並使用['SCOPE_IDENTITY()'](http://msdn.microsoft.com/en-us/library/ms190315(v = sql.90).aspx)或['OUTPUT']( http://msdn.microsoft.com/en-us/library/ms177564(v=sql.90).aspx)子句。(_Do_花時間瞭解OUTPUT。) – HABO

回答

1

你必須使用觸發器來做到這一點?

最簡單的辦法是讓SQL Server來設置主鍵ID對你來說,是這樣的:

CREATE TABLE Resource (
    ResourceID int identity, 
    . 
    . 
    . 
) 
+0

因此,如果我創建我的表並使ResourceID是int Identify,然後是何時一個insert語句,如果會自動創建並輸入ResourceID?我問的原因是因爲我在Visual Studio 2008中構建了一個應用程序,用戶將輸入數據並將數據插入到表中。意志和身份類型會照顧這個嗎? – JerseyGirl1201

+0

是的,但它是'身份證'。請參見[http://msdn.microsoft.com/zh-CN/library/ms186775%28v=sql.90%29.aspx]。如果您只想要一個數字來唯一標識表格中的每一行,「IDENTITY」會爲您做到這一點。 – nurdglaw

+0

感謝您的信息,完美的工作。 – JerseyGirl1201