Ошибка задачи «Выполнение SQL» служб SSIS «Указан набор результатов из одной строки, но строки не возвращены». - PullRequest
2 голосов
/ 11 мая 2019

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

Вот мои настройки в SSIS:

SSIS Setup

Мой оператор SQL в «Файл существует в таблице» выглядит следующим образом, а ResultSet - «Одна строка»:

SELECT ISNULL(id,0) as id FROM PORG_Files WHERE filename = ?

enter image description here

enter image description here

Мое ограничение:

enter image description here

Когда я запускаю его, в таблице еще нет файлов, поэтому он ничего не должен возвращать. Я пытался ISNULL и COALESCE, чтобы установить значение. Я получаю следующую ошибку:

Ошибка: 0xC002F309 при наличии файла в таблице. Выполнение SQL Задача: Произошла ошибка при назначении значения переменной «id»: «Указан набор результатов с одной строкой, но строки не возвращены.».

Не уверен, как это исправить. ISNULL и COALESCE - это предложения, которые можно найти в SO и MSDN

Ответы [ 2 ]

2 голосов
/ 11 мая 2019

Попробуйте изменить оператор SQL на COUNT, тогда выражение сравнения будет иметь вид @ID > 0. Таким образом, если у вас есть файлы, которые соответствуют вашему шаблону, счетчик будет больше 0, если нет файлов, он вернет 0.

 SELECT COUNT(id) as id FROM PORG_Files WHERE filename = ?
1 голос
/ 11 мая 2019

Если вы хотите проверить, существует ли строка, вам следует использовать Count, как упомянуто @ jradich1234.

SELECT COUNT(*) as id FROM PORG_Files WHERE filename = ?

Если вы хотите проверить, существует ли строка, и сохранить идентификатор в переменной, чтобы использовать ее позже в пакете, сначала вы должны использовать TOP 1, так как вы выбираете набор результатов из одной строки, и вы можете использовать аналогичный логика:

DECLARE @Filename VARCHAR(4000) = ?

IF EXISTS(SELECT 1 FROM PORG_Files WHERE filename = @Filename)
    SELECT TOP 1 id FROM PORG_Files WHERE filename = @Filename
ELSE
    SELECT 0 as id

Тогда, если id = 0, то строк не существует.

...