在执行动态插入脚本的情况下,如何在 MSSQL 存储过程中选择新插入的记录?

Posted

技术标签:

【中文标题】在执行动态插入脚本的情况下,如何在 MSSQL 存储过程中选择新插入的记录?【英文标题】:How to select newly inserted record(s) in MSSQL stored procedure in case of execution of dynamic insert script? 【发布时间】:2020-06-02 21:12:39 【问题描述】:

我想在我的 sql server 数据库中选择新插入的记录。

我知道适合我的解决方案是:

DECLARE @OutputTbl TABLE (ID INT)

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

但我的问题是关于创建插入脚本并在特定的存储过程中执行它。

我在存储过程的末尾写了这两行代码来将我的数据插入到我需要的任何表中。

SET @sqlQuery = 'INSERT INTO ' + @tblName + '(' + @param_Collection + ') ' + 'OUTPUT INSERTED.' + @IDENT_Field + ' values('+ @value_Collection +')';
EXEC sys.sp_executesql @sqlQuery;

之前声明的所有变量。

我不知道如何访问身份字段来选择正确的新插入记录。

【问题讨论】:

这不是一个存储过程,它是一个动态 sql,非常危险,除非没有办法,否则你应该避免它。 @Sami 我在存储过程中使用它。真的很危险吗? 【参考方案1】:

不,你不能。

必须使用READONLY 选项声明表值参数。因此你不能插入它。

即使在动态SQL中声明,也可以插入数据,但无法从表中获取数据,因为表变量与动态SQL的作用域是隔离的。

【讨论】:

以上是关于在执行动态插入脚本的情况下,如何在 MSSQL 存储过程中选择新插入的记录?的主要内容,如果未能解决你的问题,请参考以下文章

从php执行时mssql批量插入不起作用

MSSQL php 从一种编码中选择并插入到另一种

从 mssql 触发器运行 php 脚本

如何在不插入值的情况下在sql中创建动态行?

在没有 mssql 支持的情况下连接到 mssql

PostgreSQL:如何在不延迟插入响应的情况下执行插入触发器?