我可以在 SSIS 作业中使用 'LIKE' 语句来检查文件名是否存在吗?

Can I use a 'LIKE' statement in a SSIS job to check if filename exists?

我有一个 SSIS 作业可以将平面文件加载到数据库中。我将文件名加载到 SQL 数据库的列中。在第一步中,我检查文件名是否已经存在。如果是这样,文件将被删除。如果不是,它将被处理和加载。原始文件是 .dat。问题在于,由于另一个进程,加载的文件被重命名为在名称末尾附加了“_flat.txt”,并且与原始文件不匹配。

"YC_HSO_PA_0_Test_1.dat"

"YC_HSO_PA_0_Test_1_flat.txt"

存储文件原名的变量是'User::FileNameCheck'。我检查的 table 是 TOC.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..." 失败,出现以下错误:"Must declare the scalar variable "@"."。

我可以使用 'LIKE' 语句来查找要匹配的文件名吗?或者以某种方式将 _flat.txt 附加到变量?

看起来您的代码没有扩展@[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"