You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:09:14