1

我有一个使用更新语句的执行 SQL 任务,我想将其更改为存储过程。

我的存储过程在 SSMS 中运行良好,但是当我尝试在执行 SQL 任务中使用存储过程时,组件不会失败,但是它不会将更新的更改保留到数据库中。

连接管理器是可靠的,因为更新语句有效,如果连接管理器无论如何都错了,它甚至无法调用存储的过程。

我曾尝试删除并重新创建该组件,但这并没有帮助。似乎查询正在执行,成功,然后更改回滚。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

1

我将从检查 pstream 变量类型开始。您的存储过程需要一个 INT 并且您正在传递一个 NUMERIC。我猜parcing没有按预期工作。尝试将 SSIS 变量 'USER::Pstream' 设置为 Int32,将 Sql 任务参数类型设置为 LONG

我已经尝试了以下并为我工作。

CREATE TABLE dbo.TestTable(
    [BucketName] NVARCHAR(250),
    [DBName] NVARCHAR(250),
    [Pstream] INT
)

GO 

CREATE PROCEDURE dbo.UpdateBucket
    @BucketName NVARCHAR(250),
    @DbName NVARCHAR(250),
    @PStream INT
AS
BEGIN

    UPDATE dbo.TestTable
    SET BucketName = @BucketName
    where DBName = @DbName and Pstream = @PStream

END

GO

INSERT INTO dbo.TestTable VALUES ('A bucket', 'A database', 100)

在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

于 2018-10-09T13:39:58.567 回答
0

在任务执行之前添加断点,以便您可以在执行之前检查变量。一旦您的包在断点处停止,请使用 Watch 窗口查看将在您的存储过程中使用的当前值。我怀疑您会发现它们与预期的不同。如果您从未使用过 Watch,这应该可以帮助您:

在 SSIS 调试期间观察变量

于 2018-10-09T13:19:24.117 回答