新しい列の名前として変数を使用したい場合、これは MS SQL で可能ですか?
うまくいかない例:
ALTER TABLE my_table ADD @column INT
これは私にとってうまくいきました:
EXEC ('ALTER TABLE my_table ADD ' + @column + ' INT')
新しい列の名前として変数を使用したい場合、これは MS SQL で可能ですか?
うまくいかない例:
ALTER TABLE my_table ADD @column INT
これは私にとってうまくいきました:
EXEC ('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 の使用に関する詳細な記事を書きました - 動的 SQLの呪いと祝福 を完全に読むことをお勧めします。
( 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
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