我有一个使用更新语句的执行 SQL 任务,我想将其更改为存储过程。
我的存储过程在 SSMS 中运行良好,但是当我尝试在执行 SQL 任务中使用存储过程时,组件不会失败,但是它不会将更新的更改保留到数据库中。
连接管理器是可靠的,因为更新语句有效,如果连接管理器无论如何都错了,它甚至无法调用存储的过程。
我曾尝试删除并重新创建该组件,但这并没有帮助。似乎查询正在执行,成功,然后更改回滚。
我有一个使用更新语句的执行 SQL 任务,我想将其更改为存储过程。
我的存储过程在 SSMS 中运行良好,但是当我尝试在执行 SQL 任务中使用存储过程时,组件不会失败,但是它不会将更新的更改保留到数据库中。
连接管理器是可靠的,因为更新语句有效,如果连接管理器无论如何都错了,它甚至无法调用存储的过程。
我曾尝试删除并重新创建该组件,但这并没有帮助。似乎查询正在执行,成功,然后更改回滚。
我将从检查 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)
在任务执行之前添加断点,以便您可以在执行之前检查变量。一旦您的包在断点处停止,请使用 Watch 窗口查看将在您的存储过程中使用的当前值。我怀疑您会发现它们与预期的不同。如果您从未使用过 Watch,这应该可以帮助您: