2009-09-02 3 views
1

Использование SQL Server 2005, но с использованием DTS. Мне нужно добавить шаг, чтобы проверить, является ли таблица пустой, и каким-то образом вывести этот шаг, если это так. Легко проверить, нет ли таблицы:Как вернуть сбой, если таблица пуста

Select count(*) from source_table 

Но возвращение 0 также является успешным. Если это 0, я хочу сбой (чтобы я мог разветвить другой вариант, напишите нам, пропустите некоторые шаги).

ответ

-1

я не использовал DTS. Это было разрешено в SSIS, хотя, оглядываясь назад, я мог бы сделать что-то подобное в DTS.

Шаг 1: Задача потока данных, которая выбирает счетчик и сохраняет это значение для переменной. Выберите кол Потребовался немного работы:

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

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

Шаг 2: Задача сценария, которая оценивает это число и терпит неудачу, если счетчик равен 0, преуспевает иначе. Викинг от этого - это путь успеха и маршрут провала.

+0

Если вы собираетесь дать нисходящее движение, особенно по такому старому вопросу, было бы неплохо дать комментарий о том, почему. – thursdaysgeek

0

что касается возврата -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 
+0

Как вы используете RAISEERROR в задаче SQL DTS Execute? – thursdaysgeek

+0

@thursdaysgeek: Я обновил свой ответ на примере – Brann

+0

Потенциально лучший способ проверить на пустую таблицу: , если не существует (выберите верхний 1 0 из source_table) RAISERROR (...) –

1
if (select count(*) from [Table]) = 0 print 'Empty' 
+0

Это не вызывает ошибки, и я не думаю, что печать обычно необходима для обработки DTS или SSIS. – thursdaysgeek

+0

@thursdaysgeek: Я думал, что вы можете изменить печать с помощью raiserror(), извините :) –

Смежные вопросы