我有一个具有执行SQL任务的SSIS包,其中我有一个INSERT语句,它将日志数据插入smss中的ssis跟踪表,跟踪执行时间。 每次我尝试执行任务时都会收到此错误: [执行SQL任务]错误:执行查询" INSERT INTO dbo.SSIS_Logging_Details (Execution_In ..."失败并出现以下错误:"必须声明标量变量" @ ExecGUID"。"。可能的失败原因:查询问题,&# 34; ResultSet"属性设置不正确,参数设置不正确或连接未正确建立。
1.这是我在执行SQL任务的SQLStatement字段中的语句:
INSERT INTO dbo.SSIS_Logging_Details
(Execution_Instance_GUID, Package_Name, Execution_Date)
VALUES (@ExecGUID, @PackageName, GetDate())
2.我在执行SQL任务的参数映射选项卡中有这些参数: enter image description here
3.对于smss中的SQL表:tableSSIS_Logging-Details这里是字段:
Execution_Instance_GUID nchar(100)NULL
Package_Name nchar(100)NULL
Execution_Date datetime NULL
4.并且配置SSIS日志:包'我有一个包,其中提供程序类型是SQL Server的SSIS日志提供程序(但每当我打开它时,它会因某种原因不断切换到SQL Server Profiler ..) enter image description here
答案 0 :(得分:5)
在执行sql任务中,不要在查询中使用变量名。你用问号占位符替换它们,如下所示:
INSERT INTO dbo.SSIS_Logging_Details
(Execution_Instance_GUID, Package_Name, Execution_Date)
VALUES (?, ?, GetDate())
在参数映射中,不使用参数名称,而是使用从0开始的位置作为第一个参数。因此,将@ExecGUID
替换为0
,并将@PackageName
替换为1
。
答案 1 :(得分:0)
您也可以这样写:
DECLARE @ExecGUID NCHAR(100)
DECLARE @PackageName NCHAR(100)
SET @ExecGUID = ?
SET @PackageName = ?
INSERT INTO dbo.SSIS_Logging_Details
(Execution_Instance_GUID, Package_Name, Execution_Date)
VALUES (@ExecGUID, @PackageName, GetDate())
我使用这种格式,因为我发现在Management Studio中测试更容易。这不会查找?
,而是将所有分配保留在一个位置,特别是如果执行sql任务中有大量行。
您仍然需要在参考答案中提及@Tab Alleman参数映射。