2013-03-14 127 views
0

如何確保即使沒有數據存在,它也會始終返回結果集?未返回結果集

現在如果#TMP_SUMMARY1沒有返回任何行。

我如何能確保這下面的查詢返回我的表沒有行,而不僅僅是告訴我下面這個消息,並沒有結果選項卡此消息]選項卡。

(0行(S)的影響)

這不返回在這種情況下設置的結果是造成了我的噩夢!

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

這不回答你的問題(所以我在這裏把它當作一個註釋),但你真的應該考慮使用'sp_executesql'而不是'EXECUTE',讓您在動態SQL內有針對SQL注入防護查詢。 http://www.sommarskog.se/dynamic_sql.html#sp_executesql – 2013-03-14 13:31:28

回答

1

如果在#TMP_SUMMARY1沒有行,然後@ cols1和@ colsum1的值將是無效和動態SQL將有無效的語法。爲什麼不換你的動態SQL與

If (@cols1 is not null) 

,並在沒有列不執行該語句。