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

