2013-05-29 146 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