我有一个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]
的日期,然后在这个过程中使用该变量。我会更具体,但我不知道你的文件是如何命名的。