Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ALTER TABLE my_TABLE ADD@column INT_Sql Server_Alter Table - Fatal编程技术网

Sql server ALTER TABLE my_TABLE ADD@column INT

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领域

若我想使用一个变量作为新列的名称,在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领域时,您需要注意不要让自己暴露在动态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