SQL Server 2008 中的 MERGE 语句

Posted

技术标签:

【中文标题】SQL Server 2008 中的 MERGE 语句【英文标题】:MERGE statement in SQL Server 2008 【发布时间】:2011-12-18 15:20:37 【问题描述】:

我有一张桌子student(int ID, nvarchar(10) studentName) 和一个表用户类型myStudentType (int ID, nvarchar(10) studentName)

我需要创建一个接受myStudentType参数(@students)和参数@newname的存储过程

mySp(@students myStudentType, @newname nvarchar(10))

并将myStudentType 与student 合并,以便两个表上存在的所有具有id 的行现在都将在student 表中具有studentName - @newname(参数) 并且 sp 将返回 @students 中未更新的所有记录的列表 学生表

最好的方法是什么(最好是合并)

谢谢

【问题讨论】:

我只有部分使用合并来更新学生表中的所有行...我不知道如何将参数中未更新的所有记录获取到 sp 【参考方案1】:

我认为最有问题的规范部分是:

sp 将返回 @students 中未在学生表中更新的所有记录的列表

我假设“列表”规范意味着“表”(T-SQL 没有“列表”类型的概念)。输出参数不能是TABLE 类型(包括用户定义的表类型)。虽然函数可以返回一个表,但您不能通过函数更新基表。有关更多详细信息和可能的解决方案,请参阅 Erland Sommarskog 的 How to Share Data Between Stored Procedures。

【讨论】:

以上是关于SQL Server 2008 中的 MERGE 语句的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server2008中的MERGE SQL语句中的MERGE的全称是什麼?代表什麼意思? 有没有

Sql Server 2008 MERGE - 获取计数的最佳方式

sql server中的merge

sql server 2008 merge matched判定条件

sql server 2008中“Merge”子句的性能如何?

SQL Server中的Merge Into