SSIS For循环 - 等待文件上
我创建进口10个不同的CSV文件的SSIS包随身携带,但是每个文件的可用性不尽相同 - 所以我想要得到的文件检查循环,直到所有的文件在那里,然后开始导入过程。SSIS For循环 - 等待文件上
我检查这个通过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),创建一个SQL任务编辑器result set = single row
并将结果集选项设置为该参数。 设置InitExpression @varWaitForData = 0
和EvalExpression @varWaitForData == 0
。
,但我不断收到错误[Execute SQL Task] Error: An error occurred while assigning a value to variable "varWaitForData": "Exception from HRESULT: 0xC0015005".
我会用不同的方法:
成立了一家名为fileCount变量INT
脚本任务:获取文件数
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("\\reports\Reports\CSV");
Dts.Variables["User::fileCount"].Value = dir.GetFiles().Length;
现在成立了一个foreach文件枚举 ,把一个约束的路径上fileCount> 9
其实你不能使用foreach,如果csv文件不同。您可以使用容器,但通过保持每个数据流来获得并行执行。 – KeithL
当你运行你的执行SQL任务,什么是它的结果的查询? –