2011-01-19 2 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

쿼리는 원래 코드를 본체와 다른 컨텍스트에서 실행 (I는 SQL 서버 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 : 내 대답을 수정했습니다. * 글로벌 * (두 개의 # 기호) 테이블이 필요합니다. –

+0

감사합니다. 이것이 내가 대부분의 상황에서 할 수있는 일이지만, 나는 나의 쿼리와 관련된 간단한 일을 찾을 수 있었다. – chama

관련 문제