sql - 使用 MERGE 语句时输出不同?

标签 sql sql-server

我正在使用 MERGE 在表中插入或更新记录:

MERGE INTO target 
USING SELECT * FROM @source
WHEN MATCHED THEN
UPDATE SET ...columns...
WHEN NOT MATCHED THEN
INSERT ...columns...
OUTPUT inserted.* INTO @insertedRecord

如果上面的语句执行更新,更新后的记录是否会插入到表变量中?

最佳答案

是的。

inserted psuedotable 将处理进入表中的新值,无论是插入还是更新。

deleted 伪表将处理旧值,无论是删除还是更新(对于更新,它将是以前的值)。

更简洁:您也可以在合并中引用源表,例如OUTPUT @source.*(尽管您可能需要一个别名才能使其工作)。

关于sql - 使用 MERGE 语句时输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640611/

相关文章:

python - 让 SQL 引擎做约束检查或执行查询以预先检查约束

sql - 查找包含多个长格式条件的 ID

sql-server - msxml XMLHTTPRequest 和超时

c# - 从 ASP.NET 中的代码隐藏变量中为 SQL Server 中的 Select Top 设置变量

sql - 与sqlite中子查询的结果比较

mysql - 如何计算两个值以任意顺序出现在两列中的次数

mysql - 将具有不同值的行分组并重命名

sql - POSTGRESQL: 'utf8' 编解码器无法解码位置 31 中的字节 0x82:无效的起始字节

sql-server - MSSQL & ColdFusion 加密转换

mysql - 如何将文字列表添加到 SQL 结果