ski*_*ppy 11 sql t-sql sql-server identity auto-increment
我正在插入带有自动增量键字段的SQLServer表.(我相信这在SQLServer中称为IDENTITY列.)
在Oracle中,我可以使用RETURNING关键字为我的INSERT语句提供一个结果集,就像SELECT查询一样,它将返回生成的值:
INSERT INTO table
(foreign_key1, value)
VALUES
(9, 'text')
RETURNING key_field INTO :var;
Run Code Online (Sandbox Code Playgroud)
如何在SQLServer中完成此操作?
额外奖励:好的,到目前为止答案很好,但如果可能的话,如何将其写入单一陈述?:)
ric*_*ent 17
一般来说,它不能在一个声明中完成.
但SELECT SCOPE_IDENTITY()可以(并且应该)直接放在INSERT语句之后,因此它们都在同一个数据库调用中完成.
例:
mydb.ExecuteSql("INSERT INTO table(foreign_key1, value) VALUES(9, 'text'); SELECT SCOPE_IDENTITY();");
Run Code Online (Sandbox Code Playgroud)
您可以使用OUTPUT,但它有一些您应该注意的限制:
http://msdn.microsoft.com/en-us/library/ms177564.aspx
SELECT SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
编辑:玩游戏......
如果只有OUTPUT子句支持局部变量.
无论如何,要获得一系列ID而不是单身
DECLARE @Mytable TABLE (keycol int IDENTITY (1, 1), valuecol varchar(50))
INSERT @Mytable (valuecol)
OUTPUT Inserted.keycol
SELECT 'harry'
UNION ALL
SELECT 'dick'
UNION ALL
SELECT 'tom'
Run Code Online (Sandbox Code Playgroud)
编辑2:在一个电话中.我从来没有机会使用这个结构.
DECLARE @Mytable TABLE (keycol int IDENTITY (1, 1), valuecol varchar(50))
INSERT @Mytable (valuecol)
OUTPUT Inserted.keycol
VALUES('foobar')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33268 次 |
| 最近记录: |