4

我正在为我们的开发人员提供一种方法来轻松更新我们的数据库。我们这样做的方式是创建动态查询,它们在顶部定义变量,查询将变量用于其他所有内容。我在 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”附近的语法不正确。

4

2 回答 2

7

由于错误消息表明这是错误的语法。添加列时不允许使用关键字,这有点令人困惑。COLUMN

VARCHAR(200)应该真正SYSNAME应对所有可能的有效名称(目前相当于nvarchar(128))并用于QUOTENAME正确转义包含的任何对象名称]

有关这方面的更多信息,请参阅动态 SQL 的诅咒和祝福:处理动态表和列名

于 2013-06-19T21:03:36.410 回答
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
于 2013-06-19T21:08:47.370 回答