TSQL, если результатов нет то напиши "нет результатов" в одно из полей? - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть ряд запросов в хранимой процедуре, которые связаны с UNION. Если они все не возвращают значений т.е. Rowcount = 0, тогда я хочу, чтобы запрос говорил «Нет записей» в одном из текстовых полей

У меня есть следующее после моего объединения, но оно действует как два отдельных запроса, поэтому получаю 2 набора результатов. Мне нужно иметь только один, я попытался объединить это до конца без удачи, так как я думаю, что он не выполняет счет правильно, поскольку запрос не завершается, когда он выполняется как часть объединения.

Любая помощь будет отличной.

IF (@@ROWCOUNT = 0)
BEGIN

    SELECT       NULL AS [Date/Time]
                ,NULL AS [Event ID]
                ,NULL AS [Action Performed By]
                ,NULL AS [Action Performed On]
                ,NULL AS [Action]
                ,'No records balh balh' AS [Entitlement Being Changed]
                ,NULL AS [Description of Change]
                ,NULL AS [Application Name]
                ,NULL AS [Machine Name]
END

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

Хотя я искренне согласен с X-Zero, ужасным примером служит следующее:

declare @Stuff as table ( Thing varchar(16) )
insert into @Stuff ( Thing ) values ( 'Congress' ), ( 'Progress' ), ( 'Oxymoron' )

declare @SelectNought as Bit = 1 -- Flip me!

; with Aleph as (
  ( select Thing, 0 as Flag
    from @Stuff where Thing like 'C%' and @SelectNought = 0
  union all
  select Thing, 0 as Flag
    from @Stuff where Thing like 'P%' and @SelectNought = 0
  union all
  select Thing, 0 as Flag
    from @Stuff where Thing like 'O%' and @SelectNought = 0 ) ),
Beth as (
  select * from Aleph
  union all
  select 'Nope', 1 )
  select Thing from Beth where Flag = ( case when exists ( select * from Beth where Flag = 0 ) then 0 else 1 end )

Позвольте мне подчеркнуть: Не иди сюда!

2 голосов
/ 10 февраля 2012

Просто сказать «не делай этого» не особенно полезно.

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

В вашей хранимой процедуре выберите результаты вашего запроса объединения во временную таблицу. Затем проверьте временную таблицу на наличие существующих записей и либо верните содержимое временной таблицы или запись по умолчанию «none found».

1 голос
/ 09 февраля 2012

Я согласен с X-Zero. Если от вашего вызова базы данных нет результатов, позвольте UI обработать то, что отобразить пользователю. Как уже говорилось, это функция пользовательского интерфейса, а не лучшая практика для разделения интересов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...