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],
                '+@colSum1 +'
              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 ('+@cols1+')
              ) piv
              group by GROUPING SETS ([Credit/Debit], [PAYMENT TYPE]), ([Credit/Debit])'

execute(@query1)  

END  
4

1 に答える 1

1

#TMP_SUMMARY1に行がない場合、@cols1と@colsum1の値はnullになり、動的SQLの構文は無効になります。動的SQLをでラップしないのはなぜですか

If (@cols1 is not null)

列がない場合はステートメントを実行しないでください。

于 2013-03-14T13:28:18.230 に答える