我可以在 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"
我有一个 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"