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