我正在创建一个导入10个不同CSV文件的SSIS包,但每个文件的可用性各不相同 - 所以我想让文件检查循环,直到所有文件都存在然后开始导入过程。
我通过T-SQL脚本检查这个
IF OBJECT_ID('tblFileCheck') IS NOT NULL
DROP TABLE tbFileCheck;
CREATE TABLE tblFileCheck (
id int IDENTITY(1,1)
,subdirectory nvarchar(512)
,depth int
,isfile bit);
INSERT tblFileCheck
EXEC xp_dirtree '\\reports\Reports\CSV', 10, 1
BEGIN
IF EXISTS (
SELECT COUNT(id)
FROM tblFileCheck
HAVING count(id) > 9
)
BEGIN
PRINT 'Success - Import Latest File'
END
ELSE
BEGIN
RAISERROR ('Looping back to start - insufficient files to run', 16, 1 );
END
END
但是我无法使循环工作,我创建了一个变量varWaitForData
(int32,val = 0),创建了一个带有result set = single row
的SQL任务编辑器,并将结果集选项设置为参数。
设置InitExpression @varWaitForData = 0
AND EvalExpression @varWaitForData == 0
。
但我一直收到错误[Execute SQL Task] Error: An error occurred while assigning a value to variable "varWaitForData": "Exception from HRESULT: 0xC0015005".
答案 0 :(得分:0)
我会使用不同的方法:
将名为fileCount的变量设置为int
脚本任务:获取文件计数
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("\\reports\Reports\CSV");
Dts.Variables["User::fileCount"].Value = dir.GetFiles().Length;
现在设置一个foreach文件枚举器 并对fileCount>的路径施加约束9