2017-04-06 2 views
0

テーブルに可変数の列を追加する方法はありますか?sql変数名を持つ列を追加

私は以下を試みていますが、成功しません。

DECLARE @VAR INT = 1 
WHILE @VAR <=20 
BEGIN 
    DECLARE @COLUMN VARCHAR(MAX) = 'COLUMN_'+CAST(@VAR AS VARCHAR) 
    IF NOT EXISTS(SELECT 1 FROM SYS.columns WHERE OBJECT_ID = OBJECT_ID('MY_TBL') AND [email protected]) 
     begin 
     ALTER TABLE MY_TBL ADD @COLUMN NVARCHAR(3) NULL; 
     end 
    SET @VAR += 1 
END 
+4

:)を理解願っています。 * metadata *(列名)に* data *を埋め込むのはなぜですか?また、複雑で複雑なクエリも発生します。同じ "タイプ"のデータの繰り返しグループを表す*標準的な方法は、データの複数の*行*と同じです。 –

+1

これは悪いデザインです。同じ型のデータを持つ列がたくさんある場合は、代わりに複数の行を作成します。それは彼らのためのものです。 – Magisch

+1

ここに前の人と集計してください。これはひどいデザインです。 –

答えて

1

動的SQLを使用する必要があります。 次のコードを試してください。

フォーマット:

SELECT COUNT(*) 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_CATALOG = 'database' AND TABLE_SCHEMA = 'dbo' 
AND TABLE_NAME = 'table' 

例:

SELECT COUNT(*) 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_CATALOG = 'imDB' AND TABLE_SCHEMA = 'dbo' 
AND TABLE_NAME = 'MovieName' 

あなたは変数に格納し、それに応じて使用することができますSQL-Serverの場合

DECLARE @VAR INT = 1 
WHILE @VAR <=20 
BEGIN 
    DECLARE @COLUMN VARCHAR(MAX) = 'COLUMN_'+CAST(@VAR AS VARCHAR) 
    IF NOT EXISTS(SELECT 1 FROM SYS.columns WHERE OBJECT_ID = OBJECT_ID('MY_TBL') AND [email protected]) 
     begin 
     declare @sql varchar(100)= ' ALTER TABLE MY_TBL ADD '[email protected]+' NVARCHAR(3) NULL;' 
     exec(@sql); 
     end 
    SET @VAR += 1 
END 
0

は、私はあなたが本当に*悪いテーブルデザイン*をだ

関連する問題