在执行SQL任务中存储的proc不持久保存对数据库的更改

时间:2018-10-09 12:35:01

标签: sql sql-server ssis execute-sql-task

我有一个使用更新语句的Execute SQL Task,我想将其更改为存储过程。

我的存储过程在SSMS中工作正常,但是当我尝试在“执行SQL任务”中使用存储的proc时,组件不会失败,但是不会将对数据库的更新更改持久化。

由于Update语句有效,所以Connection管理器是可靠的,如果Connection管理器还是错误的,它甚至都无法调用存储的proc。

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

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

我将从检查pstream变量类型开始。 您存储的proc需要一个INT,并且您正在传递NUMERIC。 我猜想该功能无法按预期进行。 尝试将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)

enter image description here enter image description here

enter image description here

答案 1 :(得分:0)

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

Watch variables during SSIS Debug