2011-07-05 9 views
0

クエリ結果に基づいて一時テーブルに新しい列を追加する方法を教えてください。以下のコードを検討してくださいSQL Serverの問題で列を追加する

declare @ctr int 
set @ctr = 1 

while (@ctr <= (select count(*) from #temp2) 
begin 
    alter table #temp 
    add (select t2.Value from #temp2 t2 where t2.SysID = @ctr) (select t2.Type from #temp3 t3 where t3.SysID = @ctr) 
end 

このようなものです。私はこれについていくつかの構文エラーがあるが、私の構文が正しいことを知っている限り、

答えて

1

動的SQLを使用する必要があります。これは私が前に行っているものです:

SET @sql = 'ALTER TABLE ' + @TableName + 
      'ADD ' + CONVERT(VARCHAR(100), @ColName) + ' ' + 
      CONVERT(VARCHAR(100), @TypeName) + 
      CASE WHEN @TypeName IN ('int', 'datetime', 'money', 'uniqueidentifier', 'bit') 
       THEN '' ELSE '(' + CONVERT(VARCHAR(10), @Prec) + ')' END + ' NULL' 

EXEC(@sql) 

これはおそらく、すべての可能なデータ型をカバーしていないが、私の要件については、それは十分でした。いずれにせよ、始めるには良い場所

+0

ありがとう、それは働く...(サムスン) – Rob

+1

(サムズアップ)ではなく、大きなチックを与えることによって彼の答えを受け入れる。 – Fellmeister

+0

@Rob:あるいは、あなたはこの答えを親指で上げて*受け入れることができます。 –

1

私が知っている限り、私はあなたがこれを行うことはできないと思う。最善の希望は、グローバル一時テーブル(単一ハッシュ#の代わりに## double hash)を作成し、グローバルtempテーブルのsp_executesqlを使用してカラムを動的に追加することです。