tsql – 在INSERT之后使用OUTPUT将identity列的值赋值为(非表值)变量
发布时间:2020-05-23 11:20:34 所属栏目:MsSql 来源:互联网
导读:给出以下简单测试表: CREATE TABLE dbo.Test( Id bigint IDENTITY(1,1) NOT NULL, Name varchar(50) NULL) 我想使用OUTPUT子句在INSERT之后将标识列的值获取为标量变量,但这不起作用: DECLARE @InsertedId BIGINT;INSERT INTO Test(Name) OUTPU
|
给出以下简单测试表: CREATE TABLE dbo.Test ( Id bigint IDENTITY(1,1) NOT NULL,Name varchar(50) NULL ) 我想使用OUTPUT子句在INSERT之后将标识列的值获取为标量变量,但这不起作用: DECLARE @InsertedId BIGINT;
INSERT INTO Test(Name)
OUTPUT @InsertedId=inserted.Id
VALUES ('Michael')
-- Display resulting id for debugging
SELECT @InsertedId;
-- ...
我知道我可以在INSERT之后使用SCOPE_IDENTITY()轻松地执行此操作,但是可以使用OUTPUT子句作为INSERT语句的一部分而不使用表变量吗? 更新,另一个也是不合法的尝试: -- Return the id as a result set
INSERT INTO Test(Name)
OUTPUT inserted.Id AS TheId
VALUES ('Michael')
-- But you can't use the result set as a derived table...
SELECT TheId FROM
(
INSERT INTO Test(Name)
OUTPUT inserted.Id AS TheId
VALUES ('Michael')
)
-- ...,or you would be able to do this
SELECT TOP 1 @InsertedId=TheId
FROM
(
INSERT INTO Test(Name)
OUTPUT inserted.Id AS TheId
VALUES ('Michael')
)
解决方法记住输出子句的值是它可以返回多个记录和多个字段.因此,您可以输出一组数据的自然键和标识,因此您还可以使用集合理论将多个记录插入到子表中.输出非常强大,它将付出代价来习惯使用它.目前,在Microsoft不打算修复的scope_identity()(见链接:http://connect.microsoft.com/SQLServer/feedback/details/328811/scope-identity-sometimes-returns-incorrect-value)中有一个错误.这应该给你一个线索,即是否应该使用输出来进行新的开发,即使它对于单个记录来说有点肮脏. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 对于avg运算符,操作数数据类型时间无效…?
- SQL Server 2005 IsNumeric无法捕获’0310D45′
- 在SQL Select中将列转换为字符串
- sql-server – 是否应始终使用角色来应用SQL Server权限?
- SQL Server利用sql函数生成不重复的订单号的代码
- 在linux命令下导出导入.sql文件的方法
- sql – 从存储过程输出最后插入的主键值
- sql-server – 找不到足够好的计划的查询
- sql-server – 有没有人使用(或考虑使用)Sql Server Compac
- sql-server-2005 – T-SQL(date) – 如何在一小时内获取值?
