Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 每行动态添加列的摘要_Sql Server_Tsql - Fatal编程技术网

Sql server 每行动态添加列的摘要

Sql server 每行动态添加列的摘要,sql-server,tsql,Sql Server,Tsql,我有一个包含许多列(动态生成的列)的表和一个包含USER\u KEY(类型为INT)的行 动态添加列的类型为十进制(15,2) 我的桌子看起来像这样: [120000003],[120000002],[140000001],[120000005],[120000021],[120000025] 我想做的是获取该行中所有列的每个用户的摘要。因为有这么多的动态生成的,我不能硬类型这个。如何做到这一点 我还有变量@COLDEPARTMENTS,其中所有动态列都用逗号分隔,如下所示: [120000

我有一个包含许多列(动态生成的列)的表和一个包含
USER\u KEY
(类型为
INT
)的行

动态添加列的类型为
十进制(15,2)

我的桌子看起来像这样:

[120000003],[120000002],[140000001],[120000005],[120000021],[120000025]

我想做的是获取该行中所有列的每个用户的摘要。因为有这么多的动态生成的,我不能硬类型这个。如何做到这一点

我还有变量
@COLDEPARTMENTS
,其中所有动态列都用逗号分隔,如下所示:

[120000003],[120000002],[140000001],[120000005],[120000021],[120000025]

我假设您使用的是临时表

select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'

请参考

我假设您使用的是临时表

select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'

请参阅

您可以使用下面的脚本将所有自动生成的列作为单行,并用逗号分隔

Declare @tmp varchar(250)
SET @tmp = ''
select @tmp = @tmp + Column_Name + ', ' from [AdventureWorksDW2014].INFORMATION_SCHEMA.COLUMNS
where table_name like '%FactInternetSales%'

select SUBSTRING(@tmp, 0, LEN(@tmp)) as Columns

您还可以将结果存储在变量中,并将其与原始表一起使用。

您可以使用下面的脚本将所有自动生成的列作为一行,以逗号分隔

Declare @tmp varchar(250)
SET @tmp = ''
select @tmp = @tmp + Column_Name + ', ' from [AdventureWorksDW2014].INFORMATION_SCHEMA.COLUMNS
where table_name like '%FactInternetSales%'

select SUBSTRING(@tmp, 0, LEN(@tmp)) as Columns

您还可以将结果存储在变量中,并将其与原始表一起使用。

如果您试图识别哪些列具有值,并且不想键入列名。那么下面的内容应该是你想要的

SELECT 'SELECT user_key, '+ 
       + cols.ColumnList + CHAR(10) +
       + ' FROM ' + QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name) + CHAR(10)
FROM   sys.tables t
       CROSS APPLY (SELECT DISTINCT STUFF(
                    ( SELECT CHAR(10) + CHAR(9) + ', ' 
                             + QUOTENAME(c.name) + ' = CASE WHEN ' + QUOTENAME(c.name) + ' IS NULL THEN 1 ELSE 0 END'
                      FROM   sys.columns c 
                      WHERE  c.object_id = t.object_id
                      AND    c.name != 'user_id'
                      FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'),1,3,'') AS ColumnList
            )cols 
WHERE  t.name = '{TABLE NAME}'

如果您试图识别哪些列具有值,并且不想键入列名。那么下面的内容应该是你想要的

SELECT 'SELECT user_key, '+ 
       + cols.ColumnList + CHAR(10) +
       + ' FROM ' + QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name) + CHAR(10)
FROM   sys.tables t
       CROSS APPLY (SELECT DISTINCT STUFF(
                    ( SELECT CHAR(10) + CHAR(9) + ', ' 
                             + QUOTENAME(c.name) + ' = CASE WHEN ' + QUOTENAME(c.name) + ' IS NULL THEN 1 ELSE 0 END'
                      FROM   sys.columns c 
                      WHERE  c.object_id = t.object_id
                      AND    c.name != 'user_id'
                      FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'),1,3,'') AS ColumnList
            )cols 
WHERE  t.name = '{TABLE NAME}'