SQL Server存储过程中SSIS包中的ForEach循环容器映射变量不工作



我有一个SSIS包,它使用ForEach循环容器枚举一个目录中的Excel文件。我也有一个任务流插入数据从那些Excel文件到SQL Server。

我试图通过在我的存储过程中使用映射变量将文件名插入到SQL Server中同一表的列中。

我有麻烦与我的MappingVariable在脚本的红色弯弯曲曲结束。下面是我的存储过程脚本。

CREATE PROCEDURE [dbo].[Insert_F_STG_v2]
    @Hrs float,
    @Type nvarchar(100),
    @SN nvarchar(100),
    @Op nvarchar(100),
    @[USER::CurrentFileName]  
AS
BEGIN
    SET NOCOUNT ON;
    INSERT INTO [CRM_RC].[dbo].[F_StgTbl]([Hrs], [Type], [SN], [Op], [Report_Date])
    VALUES (@Hrs, @Type, @SN, @Op, @[USER::CurrentFileName])
END

脚本底部值块中的最后一个@[USER::CurrentFileName]是给我问题的那个。

错误如下:

Msg 102, Level 15, State 1, Procedure Insert_F_STG_v2, Line 95
"USER::CurrentFileName"附近语法错误。

您需要向数据流添加派生列,并将User::CurrentFileName分配给新列,然后将该新列包含在列映射中。

在存储过程中,将@[USER::CurrentFileName]更改为适当的SQL类型,如@filename nvarchar(255)

建议:你也可以取消存储过程,直接插入到表中(会更快,因为它是批量插入的),通过使用SQL目标而不是对每一行执行一个过程。

@[USER::CurrentFileName]不是一个有效的参数名,并且您没有为它分配数据类型。SQL Server将[USER::CurrentFileName]视为数据类型,因此失败。

最后,它似乎是你试图插入该值到[Report_Date]列。我不确定日期和文件名如何兼容。

您需要做的是创建第二个变量,从文件名中解析出有用的信息。在一个单独的变量中解析@[USER::CurrentFileName]的日期,然后在这个过程中使用该变量。我会更具体,但我不知道你的文件是如何命名的。

最新更新