如果我想使用变量作为新列的名称,这在 MS SQL 中可行吗?
不起作用的示例:
ALTER TABLE my_table ADD @column INT
这对我很有用:
EXEC ('ALTER TABLE my_table ADD ' + @column + ' INT')
如果我想使用变量作为新列的名称,这在 MS SQL 中可行吗?
不起作用的示例:
ALTER TABLE my_table ADD @column INT
这对我很有用:
EXEC ('ALTER TABLE my_table ADD ' + @column + ' INT')
这可以使用动态 sql 来构建您的 DDL 并使用EXEC
命令来执行字符串。
Declare @SQL VarChar(1000)
SELECT @SQL = 'ALTER TABLE my_table ADD ' + @column + ' INT'
Exec (@SQL)
见这篇文章。
我还要补充一点,当你冒险进入动态 sql 领域时,你需要注意不要让自己暴露在SQL 注入攻击中。始终清理传入的参数。
正如菲利普所说——在做这件事之前要仔细考虑。有可能的事实并不能使它成为一件好事……
Erland Sommarskog 写了一篇关于使用动态 sql 的详尽文章——动态 SQL的诅咒和祝福,我建议您完整阅读。
看看(执行(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
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