Удаление пустых таблиц из наборов выходных данных TSQL sproc? - PullRequest
2 голосов
/ 08 июля 2011

У меня есть sproc TSQL, который делает три цикла, чтобы найти соответствующие данные. Если первый цикл не дает результатов, то второй обычно делает. Я добавляю другую таблицу с несколькими значениями, которые я могу использовать позже.

Таким образом, самое большее, мне нужно иметь только две таблицы, возвращенные в наборе данных из 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

Процесс идет следующим образом: в первом цикле не может быть результатов. Таким образом, число строк будет равно нулю, поскольку EXEC выполняет динамически созданный SQL-запрос. Это одна таблица.

На следующей итерации возвращаются результаты, в результате чего две таблицы данных в выводе набора данных плюс моя третья добавляются в конце.

Я не хотел делать COUNT (*), тогда, если> 0, тогда выполняйте запрос так, как я хочу минимизировать запросы.

Спасибо.

1 Ответ

0 голосов
/ 08 июля 2011

Вы можете поместить результат для своего SP в табличную переменную и затем проверить, есть ли в табличной переменной какие-либо данные.

Примерно так с SP с именем GetData, который возвращает один целочисленный столбец.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...