2012-03-13 3 views
29

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

私はプロシージャを実行し、それを実行した後、列名は私に知られています。しかし、ストアドプロシージャと同じ列のデータ型を宣言する必要がありますか?

EDITは:私はこの

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

INSERT @Table 
SELECT name, location FROM 
Exec SPROC @param , @param 
+6

警告:テーブル変数はメモリに格納されているとは限りません。それは神話です。 – JohnFx

+0

あなたの質問に答えられるように、これまでのコードを含めることができますか? – JohnFx

+0

@JohnFx私はテーブル変数の作成のためのコードを実行していない。私はストアドプロシージャを作った後、私はいくつかの列名を持って、実行した後、私はそれらの列名がテーブルの変数に格納されます。 そして、それがいつもメモリに残っていない場合は、どうすれば私のデータベースで見つけることができますか?助けてください。 – Pankaj

答えて

29

@tableNameテーブル変数は、実行中のスクリプトの期間生きてみましたのみ、すなわち、彼らが唯一のセッションレベルのオブジェクトです。

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

一時的に使用できる別のタイプのテーブルオブジェクトがあります。

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

このテーブルオブジェクトが作成され、一時データベースに格納されています。彼らは、物理テーブルのための同様の作成文のように宣言#tableNameオブジェクトです。最初のものとは異なり、このオブジェクトはより有用であり、大きなデータを格納し、トランザクションなどに参加することができます。これらのテーブルは、接続がオープンになるまで生きています。作成したオブジェクトを再作成する前に、そのスクリプトをフォローして削除する必要があります。

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

これは意味があります。

+1

最後にこの部分で行いました。 :) – Pankaj

関連する問題