如果我想使用变量作为新列的名称,这在MS SQL中是否可行?
不工作的例子:
ALTER TABLE my_table ADD @column INT
这对我很有用:
EXEC ('ALTER TABLE my_table ADD ' + @column + ' INT')
答案 0 :(得分:17)
这可以使用动态sql构建您的DDL并使用EXEC
命令来执行字符串。
Declare @SQL VarChar(1000)
SELECT @SQL = 'ALTER TABLE my_table ADD ' + @column + ' INT'
Exec (@SQL)
请参阅this文章。
我还要补充一点,当你冒险进入动态sql之后,你需要注意不要让自己暴露于SQL Injection attacks。始终清理进来的参数。
正如菲利普所提到的那样 - 在做这件事之前要认真思考。可能的事实并没有使它成为一件好事......
Erland Sommarskog写了一篇关于使用动态sql的广泛文章 - The curse and blessings of dynamic SQL我建议你完全阅读。
答案 1 :(得分:1)
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
答案 2 :(得分:1)
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