我正在为我们的开发人员轻松更新我们的数据库。我们这样做的方法是创建动态查询,在顶层定义变量,查询使用其他所有变量。我已经在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”附近的语法不正确。
答案 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