Как справиться с нулевыми результатами в задачах SQL, которые возвращают отдельные строки в SSIS 2005? - PullRequest
1 голос
/ 28 мая 2010

В задаче потока данных я могу вставить количество строк в поток обработки и поместить число в переменную. Позже я могу использовать эту переменную для условного выполнения некоторой другой работы, если число строк было> 0. Это хорошо работает для меня, но у меня нет соответствующей стратегии для задач sql, которые, как ожидается, вернут одну строку. В этом случае я возвращаю эти значения в переменные. Если при поиске нет строк, задача sql завершается неудачно при назначении значений этим переменным. Я могу выполнить ветвление на этом компоненте, если произойдет сбой, но есть побочный эффект этого - если я выполняю задание как шаг задания агента SQL-сервера, этот шаг возвращает DTSER_FAILURE, вызывая сбой шага. Я могу сказать агенту sql игнорировать ошибку шага, но тогда я не буду знать, есть ли у меня допустимая ошибка на этом шаге. Это кажется сложнее, чем должно быть.

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

Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 31 мая 2010

В этом же условии вы можете иметь дополнительную логику (&& или ||). Я бы взял одну из переменных для вашего единственного утверждения и сказал бы что-нибудь по этому поводу:

Если @User :: rowcount> 0 || @User: single_record_var = По умолчанию

Это должно помочь.

0 голосов
/ 30 мая 2010

Что за оператор SQL? Можете ли вы изменить его, чтобы он по-прежнему возвращал одну строку со всеми NULL вместо строк?

Что мешает вернуть более одной строки? Пакет потерпит неудачу, если он вернет более одной строки, верно?

Вы также можете изменить его для вызова хранимой процедуры, а затем вызывать хранимую процедуру в двух местах без дублирования кода. Вы также можете изменить его на представление или пользовательскую функцию (если требуются параметры), SELECT COUNT(*) FROM udf() для проверки наличия данных, SELECT * FROM udf() для получения строки.

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