如何将插入的输出值分配给 sql server 中的变量? [复制]

Posted

技术标签:

【中文标题】如何将插入的输出值分配给 sql server 中的变量? [复制]【英文标题】:How can I assign inserted output value to a variable in sql server? [duplicate] 【发布时间】:2012-09-24 13:53:03 【问题描述】:

可能重复:SQL Server Output Clause into a scalar variable

DECLARE @id int
INSERT INTO MyTable(name)
OUTPUT @id = Inserted.id
VALUES('XYZ')

我正在尝试像上面那样。怎么可能?

【问题讨论】:

【参考方案1】:

使用表变量获取id

DECLARE @id int
DECLARE @table table (id int)
INSERT INTO MyTable(name)
OUTPUT inserted.id into @table
VALUES('XYZ')

SELECT @id = id from @table

【讨论】:

谢谢先生,不能直接赋值给int变量吗? 不,您不能使用局部变量。如果您使用上面的代码,您可以访问数据并将值从表设置为变量 @RakeshHolkar - INSERT 语法允许您插入多条记录,因此 OUTPUT 语法必须也能够处理多条记录。因此,即使您只插入一条记录,OUTPUT 也会向您返回一组数据。即使该集合是只有一个字段的单行,它也是一个集合,而不是整数。 @MatBailie:这是有道理的,但它与在返回多行的“选择”子句中进行变量赋值是完全有效的事实相冲突。例如:declare @id bigint = 0; select @id = ID from TableWithManyIDs; print @id; @id 变量将采用最后一行的 ID 值并将其打印出来。因此,对于单个插入语句,输出子句(基本上用作选择语句)应该支持相同的语法,例如output @id = inserted.ID。相反,它会因“=”周围的语法错误而失败。 这里要明确一点,我们只对分配单个值感兴趣,所以它总是插入的最后一个值,因为它是唯一插入的值。插入不能做 select 的理由是因为“它返回一个集合”是公牛的,因为“select”也返回一个集合,但它允许分配给一个变量。输出子句基本上使它成为一个选择语句。那么为什么输出不像 select 需要声明整个表的昂贵操作呢?快速调用过程不好;这些表变量创建开始累加。【参考方案2】:

您可以尝试使用“Scope_identity”功能。以下博客有进一步解释:

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/ http://msdn.microsoft.com/en-us/library/ms190315.aspx

【讨论】:

如果不使用SCOPE_IDENTITY怎么办?特别是当idGUID 的一种形式时...

以上是关于如何将插入的输出值分配给 sql server 中的变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2005 中插入值数组?

如何插入从分配给 Dictionary<int, int> 的 SQL 表中提取的数据?(ASP.Net)

如果没有插入值,如何为 SQL Server 中的列字段分配唯一值?

如何将随机值插入 SQL Server 表?

在 SQL Server 中将值分配给类似列后,使用 SSIS 将 Oracle 表列更新为 Null

将@@ rowcount分配给SQL Server存储过程中的变量