2012-02-09 13 views
1

私は次のコードを持っている:VARCHAR変数に含まれるSQLクエリ内のプロシージャでローカル・テーブル変数を使用できますか?

DECLARE @temp_table_1 TABLE (id int identity(0, 1), col_1 varchar(50)), 
     @txtVar VARCHAR(MAX) 

INSERT INTO @temp_table_1 
    SELECT col_1 FROM table_1 -- This table_1 is a real table in the database. 

Set @txtVar = 'SELECT * FROM @temp_table_1' 

EXECUTE (@txtVar) 

私が手にエラーが

では、変数の@ temp_table_1を宣言します。

どうすればこの問題を解決できますか?

答えて

4
Set @txtVar = 'SELECT * FROM myTable WHERE column_value=''' + @var1 + '''' 

Thisの記事は、動的SQLの基本的なアイデアを得るのに役立ちます。

EDIT
ダイナミッククエリではテーブル変数を使用できません。
一時テーブルまたはUse custom TABLE typeを使用する必要があります。

一時テーブル

CREATE TABLE #temp_table_1 
    ( 
    id INT IDENTITY(0, 1), 
    col_1 VARCHAR(50) 
) 

DECLARE @txtVar VARCHAR(MAX) 

INSERT INTO #temp_table_1 


SELECT col_1 
FROM table_1 -- This table_1 is a real table in the database. 
SET @txtVar = 'SELECT * FROM #temp_table_1' 

EXECUTE (@txtVar) 

DROP TABLE #temp_table_1 

カスタムテーブルタイプ

CREATE TYPE DefaultTable AS TABLE (ID INT IDENTITY(0, 1), COL_1 VARCHAR(50)) 
GO 

-- Fill a var of that type with some test data 
DECLARE @MyTable DefaultTable 
INSERT @MyTable 
SELECT col_1 FROM table_1 -- This table_1 is a real table in the database. 

-- Now this is how you pass that var into dynamic statement 
EXECUTE sp_executesql N'SELECT * FROM @MyTable', 
    N'@MyTable DefaultTable READONLY', 
    @MyTable 
+0

@Yogesh R:サンディの正しいです。注意* 2つの問題:1)文字列連結( "+")を行う方法、および2)SQL文を実行する前に文字列リテラルを引用符で囲んでください。 – paulsm4

+0

私は私の質問を編集して、再度尋ねるべきだと思います。 – Rachcha

+0

@YogeshR - 私は私の答えを編集しました。リンクされた記事が少し助けてくれることを願っています。 – CoderHawk

関連する問題