【发布时间】:2019-03-07 17:54:53
【问题描述】:
我需要从所有具有“custom1、custom2、custom3.....”列的表中的自定义列中提取数据。
Declare @TableName varchar(max)
set @TableName = 'RandomTable';
with main as
(
select distinct
infos.COLUMN_NAME, infos.TABLE_NAME
from
INFORMATION_SCHEMA.COLUMNS infos
where
infos.TABLE_NAME = @TableName
and infos.COLUMN_NAME like 'Custom%%'
)
此查询返回我在参数中指定的任何表中的自定义列的列表。知道如何在查询中使用它,以便我可以从 RandomTable.Custom%% 列中获取所有数据吗?
有什么想法吗?我正在失去它的情节。
【问题讨论】:
-
您的意思是,如果您要获得三个值(如在三列中),您想获得这些列中的值吗?如果是这样,您希望检索三个单独的列还是希望在一列中返回所有值?
-
我希望能够在参数中指定我想要的任何表格。如果该表有 3 列名称分别为“Custom1”、“Custom2”、“Custom3”,那么我希望将这些列中的值提取到名为“Custom1”、“Custom2”和“Custom3”的单独列中。如果表有 10 个“自定义”列,则相同。需要是某种动态的。
-
这可能不是最干净的解决方案,但也许你可以做这样的事情... 第 1 步:创建一个临时表。第 2 步:使用 CTE 作为游标的选择语句。第 3 步:在游标内,创建一个动态 sql-statement(只是一个将生成 sql-code 的 varchar 变量) 第 4 步(测试):打印@SqlStatement 以检查查询是否是正确的 sql。第 5 步:运行类似 (EXEC @ SqlStatement) 的 sql 代码,而 @SqlStatement 在运行时会将数据惰性化到临时表中。第六步:关闭光标。第 7 步:从 TempTable 读取结果
标签: sql join schema information-schema