2013-03-14 4 views
0

현재 데이터가 없어도 항상 결과 집합을 반환하도록하는 방법은 무엇입니까?결과 집합이 반환되지 않음

이제 #TMP_SUMMARY1은 행을 반환하지 않습니다.

아래 쿼리를 통해 행이없는 테이블을 반환하고이 메시지 탭 아래에 결과 탭이 표시되지 않도록하는 방법은 무엇입니까?

(0 행 적용됨)

이 날 악몽을 일으키는 상황이 설정 결과를 반환하지!

IF (@SUMMARY = 'Agent Summary') 

BEGIN 


DECLARE @cols1 AS NVARCHAR(MAX), 
    @colSum1 AS NVARCHAR(MAX), 
    @query1 AS NVARCHAR(MAX) 

select @cols1 = STUFF((SELECT distinct ',' + QUOTENAME(Agent) 
        from #TMP_SUMMARY1 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
print @cols1 

select @colSum1 = STUFF((SELECT distinct ', Sum(' + QUOTENAME(Agent)+') as ' +QUOTENAME(Agent) 
        from #TMP_SUMMARY1 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') ,1,1,'') 

print @colSum1 

set @query1 = 'select 
       case when [PAYMENT TYPE] is null then ''*GRAND TOTAL'' else [Credit/Debit] end [Credit/Debit], 
       case when [PAYMENT TYPE] is null then '''' else [PAYMENT TYPE] end [PAYMENT TYPE], 
       '[email protected] +' 
       from 
       (
       select [Agent] , 
        [Credit/Debit], 
        [PAYMENT TYPE], 
        value 
       from #TMP_SUMMARY2 
       unpivot 
       (
        value 
        for [Credit/Debit] in ([Amount Credit], [Amount Debit]) 

       ) unpiv 
      ) src 
       pivot 
       (
       sum(value) 
       for agent in ('[email protected]+') 
      ) piv 
       group by GROUPING SETS ([Credit/Debit], [PAYMENT TYPE]), ([Credit/Debit])' 

execute(@query1) 

END 
+0

이 질문에 답할 수는 없으므로 (여기에 코멘트로 남겨 두겠다.)하지만 동적 SQL 내에서 SQL 주입에 대한 보호 기능을 갖기 위해서는'EXECUTE'보다는'sp_executesql'을 사용하는 것이 좋습니다. 질문. http://www.sommarskog.se/dynamic_sql.html#sp_executesql –

답변

1

# TMP_SUMMARY1에 행, 다음 @ cols1와 @의 colsum1의 값이 null되며 동적 SQL은 유효하지 않은 구문이있을 것이다가없는 경우. 왜 동적 SQL을

If (@cols1 is not null) 

과 같이 랩핑하지 말고 열이 없을 때 명령문을 실행하지 마십시오.

관련 문제