存储过程 - 仅在行>时返回0

时间:2017-06-22 16:22:34

标签: sql-server

我有这个存储过程,它执行很多SQL个查询并返回结果。我如何仅返回返回行的查询的结果?

BEGIN
   DECLARE @Query varchar(4000)
   DECLARE cur CURSOR FOR SELECT SQLSyntax FROM tblChecks

   OPEN cur
   FETCH NEXT FROM cur INTO @Query
   WHILE @@FETCH_STATUS = 0 BEGIN
   EXEC (@Query)
   FETCH NEXT FROM cur INTO @Query
   END
   CLOSE cur
   DEALLOCATE cur
END

请帮帮我......

2 个答案:

答案 0 :(得分:1)

为避免返回空结果集,您必须有条件地运行每个查询。例如:

declare @query varchar(4000)

declare cur cursor local for
  select 'if exists (' + SQLSyntax + ') ' + SQLSyntax from tblChecks

open cur
fetch next from cur into @query

while @@fetch_status = 0
begin
  exec(@query)
  fetch next from cur into @query
end

close cur
deallocate cur

或者,如果每个结果集都相同,则可以先创建临时表,然后将所有值插入临时表,然后在临时表的末尾执行一个select语句:

create #temp (field1 type null, field2 type null, field3 type null)

declare @query varchar(4000)

declare cur cursor local for
  select 'insert into #temp ' + SQLSyntax from tblChecks

open cur
fetch next from cur into @query

while @@fetch_status = 0
begin
  exec(@query)
  fetch next from cur into @query
end

close cur
deallocate cur

select * from #temp
drop table #temp

如果可能,第二个选项更好,因为它只会运行一次每个查询。第一个选项将运行每个查询两次(返回数据),一次测试是否有任何结果,一次返回数据。这效率不高!希望所有查询都返回结果中的相同字段,您可以使用第二个选项。

答案 1 :(得分:1)

您还可以使用If exists策略执行和评估结果。

    IF EXISTS(exec(@query))
     BEGIN
       exec(@query)
     END