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

SQL循环查询整列内容返回列名而非实际数据如何解决?

问题根因

你当前的写法中,内层从#TEMP_COLUMN_NAME查询返回的是列名的字符串值,外层SELECT直接将该字符串作为固定值输出,所以每一行都会返回相同的列名字符串,而非对应列的实际数据。SQL不支持直接用字符串值作为查询的列标识符,需要使用动态SQL拼接语句后执行。

调整后的代码

DECLARE @colName NVARCHAR(128), @sql NVARCHAR(MAX)
WHILE @cnt < @column_count
BEGIN
    -- 取出当前循环对应的列名
    SELECT @colName = 替换为#TEMP_COLUMN_NAME中存储列名的字段名
    FROM #TEMP_COLUMN_NAME
    ORDER BY (SELECT null)
    OFFSET @CNT ROWS FETCH NEXT 1 ROWS ONLY

    -- 拼接动态查询语句,QUOTENAME用于处理带特殊字符的列名、避免注入风险
    SET @sql = N'SELECT ' + QUOTENAME(@colName) + N' FROM DDServices_History;'
    -- 执行动态SQL
    EXEC sp_executesql @sql

    SET @CNT = @CNT + 1;
END

注意事项

  • 请将代码中的替换为#TEMP_COLUMN_NAME中存储列名的字段名替换为你临时表中实际存列名的字段,比如你建表时如果用的字段是COLUMN_NAME就直接替换为该值即可
  • 如果需要将所有列的结果合并到同一个结果集返回,可以在拼接SQL时加上UNION ALL逻辑,或者调整动态SQL拼接规则

内容的提问来源于stack exchange,提问作者Dorian Daszkiewicz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:06:03