SQL - 根据值动态地将列添加到临时表

时间:2016-02-02 06:55:19

标签: sql sql-server-2008 stored-procedures temp-tables

我需要根据某些条件执行一些动态操作临时表。 (根据数字添加列并仅更新这些列)

我有一个包含单位信息的主表 - E.G。

ID   UNIT
1     kg
2     cm
3     mm

这里,行数可以变化。它可以包含3行或4行或2行。

现在我想基于此在临时表中创建一些列。

E.G。

如果主表有2个值,则#temp应包含2列作为unit1和unit2。 如果3个值则为unit1,unit2和unit3。

有可能吗?或者我是否需要直接在临时表中创建最大列数?

由于

1 个答案:

答案 0 :(得分:1)

您必须在以下内容中使用Dynamic PIVOTGLOBAL TEMP TABLE

IF OBJECT_ID('tempdb..#t') IS NOT NULL 
DROP TABLE #t
GO

CREATE  table #t 
(id varchar(max),unit varchar(max))
insert into #t (id,unit)values 
(1,'kg'),
(2,'cm'),
(3,'mm'),
(4,'m')

DECLARE @statement NVARCHAR(max)
       ,@columns NVARCHAR(max)

SELECT @columns = ISNULL(@columns + ',', '') + N'[' + cast(tbl.id as varchar(max)) + ']'
FROM (
   SELECT DISTINCT id
   FROM #t
   ) AS tbl

SELECT @statement =  'select * 
                      INTO ##temp 
                      from (
                        SELECT id,[unit]
                        FROM #t
                        ) as s 
PIVOT
(max(unit) FOR id in(' + @columns + ')) as pvt
'


EXEC sp_executesql @statement = @statement

SELECT * FROM ##temp

DROP TABLE ##temp