繁体   English   中英

执行 SQL 任务中的存储过程不会将更改持久化到数据库

[英]Stored proc in Execute SQL Task not persisting changes to database

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

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

当 Update 语句起作用时,连接管理器是可靠的,如果连接管理器无论如何都出错,它甚至无法调用存储过程。

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

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

我首先检查 pstream 变量类型。 您的存储过程需要一个 INT 并且您正在传递一个数字。 我猜测 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)

在此处输入图片说明 在此处输入图片说明

在此处输入图片说明

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

在 SSIS 调试期间观察变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM