我需要创建一个包含动态列的表,所以我创建了一个循环遍历表记录的游标,并创建了必要的列,但是,它给了我这个错误:
'INT'附近的语法不正确。
示例代码:
SELECT @sql = 'ALTER TABLE #temp3 ADD ' + @nome + ' INT'
EXEC (@sql);
我也试过这个:
EXEC ('ALTER TABLE #temp3 ADD ' + @nome + ' INT')
但仍然是同样的错误
有什么建议吗?
修改 可以接收@nome
的值的示例答案 0 :(得分:3)
您已指出@nome
可能包含,例如,非常糟糕。如果是这样,它包含一个空格 - 您需要分隔名称,以便SQL Server知道该空间是名称的一部分:
SELECT @sql = 'ALTER TABLE #temp3 ADD [' + @nome + '] INT'
EXEC (@sql);
或更准确地说,使用QUOTENAME
SELECT @sql = 'ALTER TABLE #temp3 ADD ' + QUOTENAME(@nome) + ' INT'
EXEC (@sql);
否则,SQL Server正在尝试添加一个名为Very
的列,其数据类型为Bad
,在此之后它甚至不知道如何解释int
。
答案 1 :(得分:0)
if object_id(N'#tempg') is not null
drop table #tempg
select 1 as i into #tempg
select * from #tempg
alter table #tempg add j int
exec sp_executesql N'alter table #tempg add k int'
select * from #tempg
请注意
exec 'alter table #tempg add l int'
失败
Msg 102, Niveau 15, État 1, Ligne 1
Syntaxe incorrecte vers 'alter table #tempg add l int'.
============================================= 版
exec ('alter table #tempg add l int')
运行