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