使用ALTER TABLE ... ADD COLUMN语法时出错

时间:2013-06-19 21:01:24

标签: sql-server variables

我正在为我们的开发人员轻松更新我们的数据库。我们这样做的方法是创建动态查询,在顶层定义变量,查询使用其他所有变量。我已经在Stackoverflow上使用了很多建议,但无法使其工作。

USE MyDatabase
DECLARE @TABLE VARCHAR(200) = 'MyTable'
DECLARE @COLUMN VARCHAR(200) = 'MyColumn'
DECLARE @DATATYPE VARCHAR(200) = 'VARCHAR(200)'

IF COL_LENGTH(@TABLE, @COLUMN) IS NULL
BEGIN
    DECLARE @SQL as NVARCHAR(MAX) = 'ALTER TABLE ' + @TABLE + ' ADD COLUMN ' 
      + @COLUMN +' '+ @DATATYPE
    EXEC SP_EXECUTESQL @SQL
END

我收到错误:

  

关键字“COLUMN”附近的语法不正确。

2 个答案:

答案 0 :(得分:7)

由于错误消息表明语法错误。 Somewhat confusingly添加列时不允许使用COLUMN关键字。

同样VARCHAR(200)应该SYSNAME来处理所有可能的有效名称(当前等同于nvarchar(128))并使用QUOTENAME来正确转义包含{{]的任何对象名称1}}

有关此内容的更多信息,请参阅The Curse and Blessings of Dynamic SQL: Dealing with Dynamic Table and Column Names

答案 1 :(得分:3)

由于接触SQL注入,我强烈反对这样做。但是,如果必须,请从脚本中删除单词COLUMN,它应该可以正常工作。

USE MyDatabase
DECLARE @TABLE VARCHAR(200) = 'MyTable'
DECLARE @COLUMN VARCHAR(200) = 'MyColumn'
DECLARE @DATATYPE VARCHAR(200) = 'VARCHAR(200)'

IF COL_LENGTH(@TABLE, @COLUMN) IS NULL
BEGIN
    DECLARE @SQL as NVARCHAR(MAX) = 'ALTER TABLE ' + @TABLE + ' ADD ' + @COLUMN     +' '+ @DATATYPE
    EXEC SP_EXECUTESQL @SQL
END