31

テーブル変数とは何ですか?また、既存のストアドプロシージャの結果セットと一致する列を持つテーブル変数(仮想メモリ内テーブル)を作成する方法。

プロシージャを実行し、実行した後、列名がわかりました。しかし、ストアドプロシージャと同じデータ型の列を宣言する必要がありますか?

編集:私はこれを試しました

DECLARE @Table TABLE( 
name varchar(30) NOT NULL, 
location varchar(30) NOT NULL 
); 

INSERT @Table 
SELECT name, location FROM 
Exec SPROC @param , @param
4

1 に答える 1

31

@tableNameテーブル変数は、スクリプトが実行されている間のみ有効です。つまり、テーブル変数はセッションレベルのオブジェクトのみです。

これをテストするには、SQL Server Management Studioで2つのクエリエディターウィンドウを開き、同じ名前で構造が異なるテーブル変数を作成します。あなたはアイデアを得るでしょう。したがって、@tableNameオブジェクトは一時的なものであり、データの内部処理に使用され、実際のデータベース構造には影響しません。

一時的に使用するために作成できる別のタイプのテーブルオブジェクトがあります。これらは#tableName、物理テーブルの同様のcreateステートメントのように宣言されたオブジェクトです。

Create table #test (Id int, Name varchar(50))

このテーブルオブジェクトが作成され、一時データベースに保存されます。最初のオブジェクトとは異なり、このオブジェクトはより便利で、大きなデータを格納でき、トランザクションなどに参加できます。これらのテーブルは、接続が開かれるまで存続します。再作成する前に、スクリプトに従って作成したオブジェクトを削除する必要があります。

IF OBJECT_ID('tempdb..#test') IS NOT NULL
  DROP TABLE #test 

これが理にかなっていることを願っています!

于 2012-03-15T05:21:10.400 に答える