11

新しい列の名前として変数を使用したい場合、これは MS SQL で可能ですか?

うまくいかない例:

ALTER TABLE my_table ADD @column INT

これは私にとってうまくいきました:

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

3 に答える 3

19

これは、動的 SQL を使用して DDL を構築し、EXECコマンドを使用して文字列を実行することで可能になります。

Declare @SQL VarChar(1000)

SELECT @SQL = 'ALTER TABLE my_table ADD ' + @column + ' INT'

Exec (@SQL)

この記事を参照してください。

また、動的 SQL の世界に足を踏み入れた瞬間に、SQL インジェクション攻撃にさらされないように注意する必要があることも付け加えておきます。入ってくるパラメータを常にクリーンアップします。

Philip が述べているように、これを行う前によく考えてください。それが可能であるという事実は、それを良いことにはしません...

Erland Sommarskog は、動的 SQL の使用に関する詳細な記事を書きました - 動的 SQLの呪いと祝福 を完全に読むことをお勧めします。

于 2010-04-10T16:44:09.133 に答える
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
于 2010-04-10T16:45:33.893 に答える
0
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
于 2017-03-28T07:07:44.443 に答える