2010-12-04 1 views
2

私は入力変数に依存するテーブルを作成する必要があるストアドプロシージャを作成しています。一時的な結果を得るために、私はテーブル変数を宣言している:tableBをどのように選択するか@tableB * FROM @ tableA?

declare @tableA TABLE(
column1, 
column2, 
.. 
) 

私は別の変数

declare @tableB varchar = ... 

は、最終的には一時的な結果は、に格納する必要が宣言しているので、出力テーブル名は、ユーザの入力に依存しますテーブルの名前は@テーブルBであるので、ストアドプロシージャでは次の文を記述しようとしました。

が正しくありません。誰もがテーブル変数からテーブルに値を挿入する方法を知っている名前は可変ですか?

+0

ここに何か不足していますか? @ tableBは正常なテーブルの権利ですか?では、単純な動的挿入クエリを使用できないのはなぜですか? –

答えて

1

ここでテーブル変数を使用することはできません。一時テーブルを使用してみてください。 詳細については表#tableA(...

を作成する:link text

テーブル#Aを( C1 INT、 C2 INT )を作成し、

#A値に挿入(1 、2);

#A値(3,4)に挿入;

宣言@sqlのVARCHAR(MAX)、

declare @tableB sysname = '## tableB';

@sql = 'SELECT * INTO' + @ tableB + 'FROM #A';

@sqlを印刷します。

exec(@sql);

go

select * from ## tableB; @tableBが既に存在すると仮定すると、

0

、最初の推測では、しようとするだろう:

SET @sql = 
    'INSERT 
    (
     col1, 
     col2 
    ) 
    INTO ' + @tableB + ' 
    SELECT 
    (
     col1, 
     col2 
    ) 
    FROM 
     @tableA' 

これは構文チェックされていないので、気を付けろ!

@tableBが存在しない場合、その名前はなぜユーザーから来る必要がありますか?

関連する問題