Могу ли я использовать оператор LIKE в задании SSIS, чтобы проверить, существует ли имя файла? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть задание SSIS для загрузки плоских файлов в базу данных. Я загружаю имя файла в столбец в базе данных SQL. На первом этапе я проверяю, существует ли имя файла. Если это так, файл будет удален. Если нет, он обрабатывается и загружается. Исходный файл .dat. Проблема состоит в том, что из-за другого процесса загружаемый файл переименовывается с «_flat.txt», добавляемым в конец имени, и не соответствует оригиналу.

"YC_HSO_PA_0_Test_1.dat"

"YC_HSO_PA_0_Test_1_flat.txt"

Переменная, в которой хранится исходное имя файла, - 'User :: FileNameCheck ». Таблица, по которой я проверяю, TO C .PA_STAGE. Выражение, которое я использую для проверки:

"DECLARE @FileName VARCHAR (100)
SET @FileName =  '"+ @[User::FileNameCheck]  +"'

IF EXISTS (SELECT 1
            FROM [TOC].[PA_STAGE]
            WHERE FileName = @FileName)
    BEGIN
        SELECT 0 AS LoadStatusFlag
    END
ELSE
BEGIN
SELECT 1 AS LoadStatusFlag
END"

Я пробовал это:

"DECLARE @FileName VARCHAR (100)
SET @FileName =  REPLACE(REPLACE(@[User::FileNameCheck],'.txt',''),'.dat','')  +'_flat.txt' 

IF EXISTS (SELECT 1
            FROM [TOC].[PA_STAGE]
            WHERE FileName = @FileName)
    BEGIN
        SELECT 0 AS LoadStatusFlag
    END
ELSE
BEGIN
SELECT 1 AS LoadStatusFlag
END"

, но получаю ошибку: SET @FileName = R ... "завершился неудачно со следующим ошибка: «Необходимо объявить скалярную переменную« @ ».».

Могу ли я использовать инструкцию «LIKE» для поиска имен файлов для сопоставления. Или как-то добавить _flat.txt к переменной?

1 Ответ

0 голосов
/ 13 марта 2020

Похоже, ваш код не расширяет значение @ [User :: FileNameCheck]. Попробуйте:

"DECLARE @FileName VARCHAR (100)
SET @FileName =  REPLACE(REPLACE('" + @[User::FileNameCheck] + "','.txt',''),'.dat','')  +'_flat.txt' 

IF EXISTS (SELECT 1
            FROM [TOC].[PA_STAGE]
            WHERE FileName = @FileName)
    BEGIN
        SELECT 0 AS LoadStatusFlag
END
ELSE
BEGIN
SELECT 1 AS LoadStatusFlag
END"
...