テーブル変数とはまた、既存のストアドプロシージャの結果セットと一致する列を持つテーブル変数(仮想メモリ内テーブル)を作成する方法。
プロシージャを実行し、実行した後、列名がわかります。しかし、ストアドプロシージャと同じ列のデータ型を宣言する必要がありますか?
編集:これを試しました
DECLARE @Table TABLE(
name varchar(30) NOT NULL,
location varchar(30) NOT NULL
);
INSERT @Table
SELECT name, location FROM
Exec SPROC @param , @param
@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
これが理にかなっていることを願っています!