Sql server ALTER TABLE my_TABLE ADD@column INT
若我想使用一个变量作为新列的名称,在MS SQL中是否可以这样做 不起作用的示例:Sql server ALTER TABLE my_TABLE ADD@column INT,sql-server,alter-table,Sql Server,Alter Table,若我想使用一个变量作为新列的名称,在MS SQL中是否可以这样做 不起作用的示例: 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领域
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中。始终清理输入的参数
正如Philip提到的,在做这件事之前,要仔细考虑很久。这是可能的事实并不能使它成为一件好事
Erland Sommarskog写了一篇关于使用动态sql的内容广泛的文章,我建议您全面阅读
它给出的错误是什么?@Mahesh Velaga:错误信息与此无关。ALTER TABLE语句的语法根本不正确在执行此操作之前先清理变量@Column。。。这是非常重要的,否则您还将确保对变量的值进行错误和sql注入的清理……但这不是一个特别好的主意,因为您可能最终使用保留字column column命名列,或者使用包含嵌入空格的抖动。在做这件事之前,好好想想!我经常发现,使用EXEC是我离开的第一个迹象。但有时这是最好的选择
Declare @SQL VarChar(1000)
SELECT @SQL = 'ALTER TABLE my_table ADD ' + @column + ' INT'
Exec (@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