0

我有一个表 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 ......任何人都可以帮助我......

4

1 回答 1

5

当该调用退出时,在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。

于 2013-08-22T10:58:06.920 回答