从TSQL sproc输出数据集中删除空表?

时间:2011-07-08 01:40:46

标签: tsql stored-procedures c#-4.0

我有一个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然后执行查询,因为我想最小化查询。

感谢。

1 个答案:

答案 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