我有两个与外键链接的表。我需要在一个表上执行一些插入,然后使用标识列值是我的下一批insert语句的一部分。这一切都必须通过SQL完成。
我一直在阅读有关SCOPE_IDENTITY()但我看到的所有示例都在使用ASP / PHP /无论在下一批插入中进行替换,我都没有这个选项。
任何指针都表示赞赏。
答案 0 :(得分:1)
使用
SCOPE_IDENTITY() - Function
而不是
@@IDENTITY Variable -
否则你得到最后一个插入标识的结果 - 如果表上有一个触发器而不是插入某个地方你得到错误的结果(触发器而不是你的语句插入的值)。 Scope_Identity返回您的语句的标识,这是您通常想要的。
答案 1 :(得分:1)
在SQl Server 2008中,您还可以使用OUTPUT子句。
DECLARE @output TABLE (myid INT)
INSERT mytable (field1, field2)
OUTPUT inserted.myid INTO @output
VALUES ('test', 'test')
SELECT * FROM @output
使这一点特别有价值的是,如果您使用它来插入一堆记录而不是一个可以获得所有身份的记录,您还可以返回您可能需要的任何其他字段。
类似的东西:
DECLARE @output TABLE (myid INT, field1 datetime)
INSERT mytable (field1, field2)
OUTPUT inserted.myid, inserted.field1 INTO @output
Select '20100101', field3 from mytable2
SELECT * FROM @output
答案 2 :(得分:0)
您可以使用SQL或TSQL执行相同的操作。只需在插入后立即指定标识列。
答案 3 :(得分:0)
您可以使用
SELECT SCOPE_IDENTITY() [Iden]
在同一个块中插入语句之后。这应该有用。
答案 4 :(得分:0)
-- Variable to hold new Id
Declare @NewId int
--Insert some values in to create a new ID
Insert Into dbo.MyTable1 (Col1)
Values (@NewValue)
-- Grab the new Id and store it in the variable
Select @NewId = Scope_Identity()
--Insert the new Id in to another table
Insert Into dbo.AnotherTable (Col1)
Values (@NewId)