2011-01-19 21 views
3

私は、クエリの結果を添付ファイルを送信することになっているSQLストアドプロシージャで作業しています。sp_send_dbmailのローカル変数?

私はsp_send_dbmailを使用してメールを送信しています。

送信したいクエリ内で、私はテーブル変数に参加します。ストアドプロシージャを実行すると、変数が存在しないというエラーメッセージが表示されます。

マイコード:

DECLARE @t TABLE (
    id INT IDENTITY(1,1), 
    some fields 
) 

DECLARE @query VARCHAR(MAX) 
SET @query = 'SELECT 
    some values 
FROM @t t 
    INNER JOIN dbo.Table d ON t.field = d.field 
EXEC msdb.dbo.sp_send_dbmail @[email protected]_list, 
     @subject = @subject, 
     @query = @query, 
     @attach_query_result_as_file = 1, 
     @query_result_width = 4000, 
     @query_attachment_filename = 'Details.txt' 

は私がこのストアドプロシージャ内のローカル変数を参照するための方法はありますか?そうでない場合は、どうしてですか?

TIA!

答えて

4

クエリがあなたの元のコード本体とは別のコンテキストで実行されます(私は、SQL Server 2005を使用しています)ので、任意のローカル変数を認識しません。グローバルな一時テーブルを代わりに使用してみてください。

CREATE TABLE ##t (
    id INT IDENTITY(1,1), 
    some fields 
) 

DECLARE @query VARCHAR(MAX) 
SET @query = 'SELECT 
    some values 
FROM ##t t 
    INNER JOIN dbo.Table d ON t.field = d.field' 
EXEC msdb.dbo.sp_send_dbmail @[email protected]_list, 
     @subject = @subject, 
     @query = @query, 
     @attach_query_result_as_file = 1, 
     @query_result_width = 4000, 
     @query_attachment_filename = 'Details.txt' 

DROP TABLE ##t 
+0

なぜテンポラリテーブルを使用しますか?元のコードの文脈でも一時テーブルはありませんか? – chama

+0

@chama:私の答えを修正しました。 *グローバル*(2つの#記号)表が必要です。 –

+0

ありがとうございます。これはほとんどの状況で私がやろうとしていることですが、私はその質問に固有の単純な問題を見つけることができました。 – chama