ALTER TABLE my_table ADD @column INT

时间:2010-04-10 16:40:53

标签: sql-server alter-table

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

不工作的例子:

ALTER TABLE my_table ADD @column INT

这对我很有用:

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

3 个答案:

答案 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)

查看(EXECUTE (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

答案 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