参数SQL插入语句SSIS包

时间:2015-10-22 19:56:24

标签: sql ssis

我有一个具有执行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

2 个答案:

答案 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参数映射。