SSMS中使用CTE搭配表变量仅提示行受影响无结果输出
SSMS执行T-SQL仅返回受影响行数无表格结果问题处理
问题场景
在SQL Server Management Studio中执行结合CTE与表变量的T-SQL脚本时,执行完成后仅提示受影响的行数,未返回预期的表格格式查询结果。
相关信息
- 涉及测试表结构
Class_1:包含字段Id int、Name nvarchar(50)、Address nvarchar(50)Class_2:包含字段Id int、Name nvarchar(50)、Address nvarchar(50)- 两张测试表各存储3条数据记录
- 原执行脚本
DECLARE @StudentDetails TABLE ( Id int, Name nvarchar(50), Address nvarchar(50) ) ;with CTE_StudentInformation as ( Select Id,Name,Address from Class_1 union all Select Id,Name,Address from Class_2 ) insert into @StudentDetails (Id,Name,Address) Select Id,Name,Address from CTE_StudentInformation
- 实际执行输出
6 rows affected
- 预期结果:以表格形式返回两张表合并后的所有明细数据。
根因分析
脚本仅完成了「CTE合并两张表数据→将合并结果插入表变量」的写入操作,没有对存储最终合并结果的表变量执行SELECT查询动作,SSMS只会返回DML操作的受影响行数提示,不会主动输出表变量内存储的数据。
修复方法
在原有脚本末尾追加针对表变量@StudentDetails的查询语句即可,修改后可正常返回表格格式结果,完整代码如下:
DECLARE @StudentDetails TABLE ( Id int, Name nvarchar(50), Address nvarchar(50) ) ;with CTE_StudentInformation as ( Select Id,Name,Address from Class_1 union all Select Id,Name,Address from Class_2 ) insert into @StudentDetails (Id,Name,Address) Select Id,Name,Address from CTE_StudentInformation -- 查询表变量存储的合并结果,触发表格返回 SELECT Id, Name, Address FROM @StudentDetails
如果不需要暂存合并结果做后续逻辑处理,可直接省略表变量和插入步骤,直接查询CTE结果即可拿到返回值,代码更简洁:
;with CTE_StudentInformation as ( Select Id,Name,Address from Class_1 union all Select Id,Name,Address from Class_2 ) SELECT Id,Name,Address FROM CTE_StudentInformation
内容的提问来源于stack exchange,提问作者Yogesh Bhosale
相关产品推荐
相关产品推荐

