11

如果我想使用变量作为新列的名称,这在 MS SQL 中可行吗?

不起作用的示例:

ALTER TABLE my_table ADD @column INT

这对我很有用:

EXEC ('ALTER TABLE my_table ADD ' + @column + ' INT')
4

3 回答 3

19

这可以使用动态 sql 来构建您的 DDL 并使用EXEC命令来执行字符串。

Declare @SQL VarChar(1000)

SELECT @SQL = 'ALTER TABLE my_table ADD ' + @column + ' INT'

Exec (@SQL)

这篇文章。

我还要补充一点,当你冒险进入动态 sql 领域时,你需要注意不要让自己暴露在SQL 注入攻击中。始终清理传入的参数。

正如菲利普所说——在做这件事之前要仔细考虑。有可能的事实并不能使它成为一件好事……

Erland Sommarskog 写了一篇关于使用动态 sql 的详尽文章——动态 SQL的诅咒和祝福,我建议您完整阅读。

于 2010-04-10T16:44:09.133 回答
1

看看(执行(Transact-SQL)

CREATE TABLE MyTable(
        ID INT
)
GO
SELECT * FROM MyTable
GO
DECLARE @column VARCHAR(100)
SET @column = 'MyNewCol'
EXEC('ALTER TABLE MyTable ADD ' + @column + ' INT')
GO
SELECT * FROM MyTable
GO
DROP TABLE MyTable
于 2010-04-10T16:45:33.893 回答
0
alter procedure sp_check_table_column
(
    @field_name varchar(max),
    @data_type varchar(max),
    @mandatory varchar(max)
)
as
if not exists (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '<table_name>' and COLUMN_NAME = @field_name)
begin
 declare @sql varchar(max)
 set @sql = ('ALTER TABLE <table_name> ADD ' + @field_name + ' ' + @data_type + ' ' + @mandatory)
 exec (@sql) 
end
于 2017-03-28T07:07:44.443 回答