0

我需要创建一个包含动态列的表,所以我创建了一个游标,它遍历表的记录并将创建必要的列,但是,这给了我这个错误:

'INT' 附近的语法不正确。

示例代码:

SELECT @sql = 'ALTER TABLE #temp3 ADD ' + @nome + ' INT'
EXEC (@sql);

我也试过这个:

EXEC ('ALTER TABLE #temp3 ADD ' + @nome + ' INT')

但仍然是同样的错误

有什么建议么?

编辑: 可以接收@nome的值示例

  • 很坏
  • 坏的
  • 好的
  • 很好
4

2 回答 2

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

于 2013-01-10T10:52:39.403 回答
0

感谢@Damien 鼓励我进行调查:

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')

运行

于 2013-01-10T10:52:56.453 回答