2017-02-15 10 views
0

変数として定義されたテーブルに約50列を追加したいと思います。これらの列の名前は別のテーブルから来ており、基本的には数字だけです(DEPA_KEY)。 (部門キー)テーブル変数に50列を動的に追加する

これらの列をループなどで動的に追加することはできますか?変数として定義

表(ここでは、私は動的に50列を追加たい):すべての部門のための

DECLARE @USERS TABLE 
(
    USER_KEY INT, 
    USDE_HSU DECIMAL(8,2) 
) 

問合せ:

SELECT DEPA_KEY FROM CADEPA 

答えて

1

私の知る限り、あなたは、テーブル変数の構造を変更することはできません。

DECLARE @T AS TABLE 
(
    col1 int 
); 

ALTER TABLE @T 
    ADD col2 char(1)  
; 

このエラーが発生します。

あなたは、しかし、一時テーブルでそれを行うことができます。

CREATE TABLE #T 
(
    col1 int 
); 

ALTER TABLE #T 
    ADD col2 char(1) 
;  
1

テーブル変数の構造を変更することはできません。 このように、@USERSに列を追加することはできません。

一時テーブルの構造を変更することができます。あなたは一時テーブルにあなたの変数を変更する場合は、その後、動的に列を追加することができます:

CREATE TABLE #USERS 
(
    USER_KEY INT, 
    USDE_HSU DECIMAL(8,2) 
) 

DECLARE @col_name VARCHAR(100) 
     ,@Sql VARCHAR(MAX) 
DECLARE col_name CURSOR 
    FOR 
    SELECT DEPA_KEY 
    FROM CADEPA 

OPEN col_name 
FETCH NEXT FROM col_name 
    INTO @col_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    SET @Sql = 'ALTER TABLE #USERS ADD ' + QUOTENAME(@col_name) + ' INT NULL' 

    -- PRINT @Sql 
    EXEC (@Sql) 

    FETCH NEXT FROM col_name 
     INTO @col_name 

END 

CLOSE col_name 
DEALLOCATE col_name 
関連する問題