Как да върнете грешка, ако таблицата е празна

Използване на SQL Server 2005, но все още използване на DTS. Трябва да добавя стъпка, за да проверя дали дадена таблица е празна и по някакъв начин да проваля стъпката, ако е. Лесно се проверява дали таблицата е празна:

Select count(*) from source_table

Но връщането на 0 също е успех. Ако е 0, искам неуспех (за да мога да прехвърля към друга опция, да ни изпратя имейл, да пропусна някои стъпки).


person thursdaysgeek    schedule 02.09.2009    source източник


Отговори (4)


какво ще кажете за връщането на -1?

Select 
   case when count(*)>=0 then count(*) else -1 end 
from 
   source_table

Ако наистина искате да предизвикате грешка, можете да използвате RAISERROR за направи точно това:

Declare @RowCount as bigint
set @RowCount=count(*) from source_table
if RowCount =0
RAISERROR ('error message', 50000, 1)  with log
person Brann    schedule 02.09.2009
comment
Как използвате RAISEERROR в DTS Execute SQL Task? - person thursdaysgeek; 02.09.2009
comment
Потенциално по-добър начин за проверка за празна таблица: ако не съществува (изберете топ 1 0 от source_table) raiserror(...) - person Dave Carlile; 03.09.2009

Можете да разделите с резултат от броенето:

Select 1/count(*) from source_table
person Michal    schedule 03.02.2020
comment
Имам няколко работни места след този проблем, така че няма начин да тествам, но това наистина изглежда като добро решение. - person thursdaysgeek; 03.02.2020

Не съм ползвал DTS. Беше решен в SSIS, въпреки че, поглеждайки назад, вероятно бих могъл да направя нещо подобно в DTS.

Стъпка 1: Задача за поток от данни, която избира броя и го записва в променлива. Избраният брой отне малко работа:

select cast(count(*) as integer) as Row_Count from MyTable

и след това изходът от задачата за поток от данни беше компонент на скрипт, който беше местоназначение и имаше входна колона като този ROW_COUNT, и моите ReadWriteVariables като TableCount (променливата, която беше използвана като вход в стъпка 2)

Стъпка 2: Скриптова задача, която оценява този брой и е неуспешна, ако броят е 0, в противен случай е успешна. Разклонението от това е път за успех и път за провал.

person thursdaysgeek    schedule 15.10.2009
comment
Ако ще гласувате против, особено на толкова стар въпрос, би било хубаво да дадете коментар защо. - person thursdaysgeek; 12.03.2013

person    schedule
comment
Това не води до грешка и не мисля, че отпечатването обикновено е това, което е необходимо при обработката на DTS или SSIS. - person thursdaysgeek; 29.05.2013
comment
@thursdaysgeek: Мислех, че можеш да промениш печат с raiserror(), съжалявам :) - person Igor Kryltsov; 07.08.2013