SQL动态临时表

时间:2013-08-22 10:16:47

标签: sql-server-2008

我有一个表dbo.CTC_GRP ...下面是表名和值......

**CTC_GRP_DS**
Bank Contact
Dept2
CS

我正在尝试创建一个临时表,如下所示。这些是从表列值

生成的列名
   Proj_ID   Bank Contact     Dept2     CS

我的尝试低于......

  DECLARE @Dept NVARCHAR(MAX)
  DECLARE @DeptQry NVARCHAR(MAX)


  SELECT  @Dept = STUFF((SELECT ',' +  QUOTENAME(CTC_GRP_DS) + ' varchar(max)'
                from dbo.CTC_GRP
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

 set @DeptQry = N'Create Table #temptable ( Proj_ID int,' + @Dept + ' '+') '

 print @DeptQry

 EXEC sp_executesql @DeptQry;

直到打印@DeptQry我能够到达,我怎样才能执行那些动态创建的sql ... 任何人都可以帮助我...

1 个答案:

答案 0 :(得分:4)

当呼叫退出时,EXEC / sp_executesql内创建的临时表将被销毁。您需要在外部作用域中创建表。然后,您可以使用EXEC调用对其进行修改。类似的东西:

create table #temptable (Proj_ID int)

EXEC sp_executesql N'alter table #temptable add [Bank Contact] nvarchar(max)'
EXEC sp_executesql N'alter table #temptable add [Dept2] nvarchar(max) int'

不幸的是,每个新列都需要通过单独的alter table语句添加。

显然,操作此表的所有内容也必须是动态SQL。