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
相关产品推荐
相关产品推荐

