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

SQL Server&SMSS18:未知列数下表列名转行存入临时表

通用方法:将任意SQL表的列名插入临时表

核心思路

利用SQL的系统元数据视图(存储数据库所有对象的结构信息),无需硬编码列名,即可动态获取任意表的所有列名并插入临时表。

具体实现步骤

1. 准备临时表

先创建仅含ColumnNames列的临时表,若临时表已存在则先删除:

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
    DROP TABLE #Temp
CREATE TABLE #Temp (ColumnNames NVARCHAR(128))

2. 插入列名(两种通用方法)

方法一:使用标准INFORMATION_SCHEMA.COLUMNS视图

这是SQL标准定义的视图,兼容性更强:

INSERT INTO #Temp (ColumnNames)
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_NAME = 'Table1' -- 替换为目标表名
    AND TABLE_SCHEMA = 'dbo' -- 替换为目标表所属的schema(非dbo需修改)
ORDER BY ORDINAL_POSITION -- 可选:按列在表中的原始顺序排列

方法二:使用SQL Server专属sys.columns视图

适合SQL Server环境,查询效率更高:

INSERT INTO #Temp (ColumnNames)
SELECT c.name
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE 
    t.name = 'Table1' -- 替换为目标表名
    AND SCHEMA_NAME(t.schema_id) = 'dbo' -- 替换为目标表所属的schema
ORDER BY c.column_id -- 可选:按列在表中的原始顺序排列

方法优势

  • 无需硬编码列名,不管目标表有多少列,都能动态获取所有列名
  • 更换目标表时,仅需修改TABLE_NAME和TABLE_SCHEMA参数,核心逻辑无需调整
  • 完全不需要使用PIVOT/UNPIVOT(这类语法用于行列转换,不适合读取元数据场景)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:22:41