【问题标题】:SSIS loading .csv flat files using For Each Loop Container : Execute SQL Task expression to populate the audit table with Row CountSSIS 使用 For Each Loop Container 加载 .csv 平面文件:执行 SQL 任务表达式以使用行数填充审计表
【发布时间】:2019-05-29 14:26:04
【问题描述】:

我正在使用 SSIS (Visual Studio 2017) 将许多 .csv 文件加载到 SQL Server 表中。

我正在使用 For Each 循环容器。我有两个用户变量 - FileName (string) 和 RowCnt (int)

我开发了一个审核表 (dbo.FEfiles) 来跟踪加载的每个文件以及每个文件中的记录数。

审计表有两列:

1) 文件名(varchar(20)

2) 行数(int)

在 For Each 循环容器内设置数据流任务后,我有一个连接到我的审计表的执行 SQL 任务。

在这个执行 SQL 任务中,在表达式选项卡中,在 SQLStatementSource 下,我有以下表达式来单独获取文件名:

"INSERT INTO dbo.FEfiles (FileName) SELECT '" + @[User::Filename] + "'"

当我评估表达式时,这会正确解析,我得到:

INSERT INTO dbo.FEfiles (FileName) SELECT 'filename.CSV'

现在,如何为具有整数数据类型的 RowCnt 添加变量?

我尝试了许多选项,例如以下选项:

"INSERT INTO dbo.FEfiles (FileName,RowCount) SELECT '" + @[User::Filename] + "', + (DT_WSTR, 12) @[User::RowCnt] "

当我评估表达式时,我得到以下信息:

INSERT INTO dbo.FEfiles (FileName,RowCount) SELECT 'filename.CSV', + (DT_WSTR, 12) @[User::RowCnt]

我需要改为:INSERT INTO dbo.FEfiles (FileName,RowCount) SELECT 'filename.CSV', 0

你能帮我找到正确的表达方式吗?

我什至看过这个视频,但无法弄清楚:

https://www.youtube.com/watch?v=Um7tDy9jZRs

【问题讨论】:

    标签: ssis rowcount tracker foreach-loop-container audit-tables


    【解决方案1】:

    试一试。

    "INSERT INTO dbo.FEFiles (FileName,RowCount) VALUES ('" + @[User::Filename] + "'," +  (DT_WSTR, 12) @[User::RowCnt] + ")"
    

    每个用户 cmets 必须将 RowCount 放入括号中作为列名。

    "INSERT INTO dbo.FEFiles (FileName,[RowCount]) VALUES ('" + @[User::Filename] + "'," + (DT_WSTR, 12) @[User::RowCnt] + ")"
    

    字符串部分

    "INSERT INTO dbo.FEFiles (FileName,[RowCount]) VALUES ('" 
    + 
    @[User::Filename] 
    + 
    "'," 
    +  
    (DT_WSTR, 12) @[User::RowCnt] 
    + 
    ")"
    

    【讨论】:

    • 虽然表达式计算正确,但在运行 SSIS 包时出现以下错误:[执行 SQL 任务] 错误:执行查询“INSERT INTO dbo.FEfiles (FileName,RowCount) VALUES.. .”失败,出现以下错误:“关键字'RowCount'附近的语法不正确。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接没有正确建立。
    • 当我用表名提到列名时,似乎有问题,要在其中进行插入。 INSERT INTO dbo.FEfiles (FileName,RowCount)
    • 我可以通过删除列名成功运行 SSIS 包: "INSERT INTO dbo.FEfiles SELECT '" + @[User::Filename] + "' , " + (DT_WSTR, 12 ) @[User::RowCnt] (或) "INSERT INTO dbo.FEfiles VALUES ('" + @[User::Filename] + "'," + (DT_WSTR, 12) @[User::RowCnt] + ") "
    • 但理想情况下,我需要提及表中的列名,因为我计划在 dbo.FEfiles Audit-Tracker 表中添加更多列。你能帮我吗?
    • 在 SSIS 中也有这种解析的规则书吗?我无法理解何时使用单引号(')或双引号(“)。如何使用变量等。我刚刚从互联网上获取代码。我花了几个小时进行编码!
    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多