gpt4 book ai didi

sql - T-SQL EXEC 和作用域

转载 作者:行者123 更新时间:2023-12-04 16:57:09 27 4
gpt4 key购买 nike

假设我有一个存储过程,它的主体中有这个:

EXEC 'INSERT INTO ' + quotename(@table) ' blah...'
SELECT IDENT_CURRENT('' + @table + '')

IDENT_CURRENT() 是否保证获得在 EXEC 中插入的行的标识? IDENT_CURRENT() “返回为任何 session 和任何范围内的特定表生成的最后一个标识值”,但 EXEC 中的范围与存储过程不同,对吗?

我想确保如果存储过程一次被多次调用,正确的身份是 SELECTed。

编辑:或者我是否需要在 EXEC 中同时执行 INSERT 和 SELECT,如下所示:
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'
EXEC @insert

如果是这种情况,如果我想在 T-SQL 中继续使用更多代码,我该如何选择 EXEC 的结果?像这样(虽然显然不正确):
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'

declare @ident int
set @ident = EXEC @insert

-- more code
SELECT * FROM blah

更新:在第一个片段中,如果我选择 SCOPE_IDENTITY() 而不是使用 IDENT_CURRENT(),则 SELECT 会返回 NULL。 :(

最佳答案

尝试

EXEC 'INSERT INTO ' + quotename(@table) ' blah...; SELECT @@IDENTITY'

或更好,根据 this
EXEC 'INSERT INTO ' + quotename(@table) ' blah...; SELECT SCOPE_IDENTITY()'

关于sql - T-SQL EXEC 和作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731821/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com