2009-06-05 8 views
3

こんにちは私はサイズのn列の動的なレポートテーブルを作成する大規模なストアドプロシージャを書いています、最初の6は定数です残りはいくつかの引数をプロシージャに渡される必要な列を持つテーブルを作成します。ストアドプロシージャの列のTSQLの動的追加

私が午前問題は、私は上記のコードのALTER TABLE文で@columnnameでこれに構文エラーを取得しています、次のTSQL

DECLARE @columnname VARCHAR(50) 
SET @columnname = 'on_' + @description 

IF NOT EXISTS(SELECT * FROM syscolumns WHERE id = OBJECT_ID('reports') 
     AND NAME = @columnname) 
BEGIN 
     ALTER TABLE reports ADD @columnname VARCHAR(50) NULL 
END 

です。

これは初めてのことですが、これを行うための最良の方法であるかどうか、または必要な動的テーブルを生成するためのTSQLのより良い方法があるかどうかはわかりません。

答えて

13

このお試しください:

宣言@sqlはnvarchar(100)

セット@sql = 'ALTER TABLEレポートADD '+ @ ColumnNameに+' VARCHAR(50)NULL'

幹部sp_executesqlをします@sql

2

動的にする必要はありません。私はこのような何かにあなたのBEGINブロックを変更すると信じて:

DECLARE @sql VARCHAR(8000) 

BEGIN  
    SET @sql = 'ALTER TABLE Table_1 ADD '[email protected]+' VARCHAR(50) NULL'  
    EXEC(@sql)   
END 
3

てみ

DECLARE @columnname VARCHAR(50) 
SET @columnname = '[on_' + @description +']' 
IF NOT EXISTS(SELECT * FROM syscolumns WHERE id = OBJECT_ID('reports')  
    AND NAME = @columnname) 
BEGIN  
ALTER TABLE reports ADD @columnname VARCHAR(50) NULL 
END 
関連する問題