web-dev-qa-db-ja.com

SQL Server 2008 R2でテーブル変数を作成する

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

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

編集:これを試しました

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

INSERT @Table 
SELECT name, location FROM 
Exec SPROC @param , @param
30
Pankaj

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

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

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

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

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

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

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

30
mangeshkt