我有这个存储过程,它执行很多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
请帮帮我......
答案 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