参数 SQL 插入语句 SSIS 包

Parameter SQL Insert into Statement SSIS Package

我有一个 SSIS 程序包,其中有一个执行 SQL 任务,其中我有一个 INSERT 语句将日志数据插入此 ssis 跟踪 table 在跟踪执行时间的 smss 中。 每次我尝试执行任务时,我都会收到此错误:[Execute SQL Task] Error: Executing the query "INSERT INTO dbo.SSIS_Logging_Details (Execution_In..." 失败并出现以下错误:"Must declare the scalar variable "@ExecGUID"."。可能的失败原因:查询问题,"ResultSet" 属性 设置不正确,参数设置不正确,或者连接建立不正确。

1.This 是我在执行 SQL 任务的 SQL 语句字段中的语句:

INSERT INTO dbo.SSIS_Logging_Details
          (Execution_Instance_GUID, Package_Name, Execution_Date)
          VALUES (@ExecGUID, @PackageName, GetDate())

2.I 在执行 SQL 任务的参数映射选项卡中有这些参数: enter image description here

3.For SQL table in smss:tableSSIS_Logging-这里的详细信息是字段:

Execution_Instance_GUID nchar(100) NULL

Package_Name nchar(100) NULL

Execution_Date 日期时间 NULL

4.And 用于 'Configure SSIS Logs: Package' 我在那里有一个包,提供程序类型是 SQL 服务器的 SSIS 日志提供程序(但它一直切换到 SQL 服务器每当我打开它时出于某种原因的探查器..) enter image description here

您不在执行 sql 任务的查询中使用变量名称。您将它们替换为问号占位符,如下所示:

INSERT INTO dbo.SSIS_Logging_Details
          (Execution_Instance_GUID, Package_Name, Execution_Date)
          VALUES (?, ?, GetDate())

在您的参数映射中,第一个参数使用从 0 开始的位置而不是参数名称。因此,将 @ExecGUID 替换为 0,将 @PackageName 替换为 1

你也可以这样写:

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 在他的回答中提到的那样更改参数映射。