我有一个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'。
答案 0 :(得分:2)
您需要将派生列添加到数据流中,并将User::CurrentFileName
分配给新列,然后在列映射中包含此新列。
在存储过程中,将@[USER::CurrentFileName]
更改为适当的SQL类型,例如@filename nvarchar(255)
。
建议:您也可以取消存储过程,并通过使用SQL目标而不是为每一行执行过程直接插入表中(因为它的批量插入会更快)。
答案 1 :(得分:0)
@[USER::CurrentFileName]
不是有效的参数名称,并且您没有为其分配数据类型。 SQL Server将[USER::CurrentFileName]
视为数据类型,因此失败。
最后,您似乎正在尝试将该值插入[Report_Date]
列。我不确定Date和Filename如何兼容。
答案 2 :(得分:0)
您需要做的是创建第二个变量,从您的文件名中解析有用的信息。在一个单独的变量中,从@[USER::CurrentFileName]
解析日期,然后在此proc中使用该变量。我会更具体,但我不知道你的文件是如何命名的。