我有一个TSQL sproc,它可以执行三个循环以查找相关数据。如果第一个循环没有结果,那么第二个循环通常会产生结果。我附加了另一个具有多个值的表,我稍后可以使用它。
所以最多只能在sproc的数据集中返回两个表。
问题是如果第一个循环是空白的,那么我的数据集中最后会有三个数据表。
在我的C#代码中,我可以删除这个空表,但不希望它从sproc中返回。
有没有办法从sproc中删除空表,具体如下:
EXEC (@sqlTop + @sqlBody + @sqlBottom)
SET @NumberOfResultsReturned = @@ROWCOUNT;
.
.
.
IF @NumberOfResultsReturned = 0
BEGIN
SET @searchLoopCount = @searchLoopCount + 1
END
ELSE
BEGIN
-- we have data, so no need to run again
BREAK
END
过程如下:在第一个循环中可能没有结果。因此,rowcount将为零,因为EXEC执行动态创建的SQL查询。那是一张桌子。
在下一次迭代中,返回结果,使数据集输出中的两个数据表加上我在结尾处添加的第三个数据表。
如果>我不想做COUNT(*) 0然后执行查询,因为我想最小化查询。
感谢。
答案 0 :(得分:0)
您可以将SP的结果放在表变量中,然后检查表变量中是否包含任何数据。
使用名为GetData
的SP返回一个整数列。
declare @T table(ID int)
declare @SQL varchar(25)
-- Create dynamic SQL
set @SQL = 'select 1'
-- Insert result from @SQL to @T
insert into @T
exec (@SQL)
-- Check for data
if not exists(select * from @T)
begin
-- No data continue loop
set @searchLoopCount = @searchLoopCount + 1
end
else
begin
-- Have data so wee need to query the data
select *
from @T
-- Terminate loop
break
end