我有一个使用更新语句的Execute SQL Task,我想将其更改为存储过程。
我的存储过程在SSMS中工作正常,但是当我尝试在“执行SQL任务”中使用存储的proc时,组件不会失败,但是不会将对数据库的更新更改持久化。
由于Update语句有效,所以Connection管理器是可靠的,如果Connection管理器还是错误的,它甚至都无法调用存储的proc。
我尝试删除并重新创建该组件,但这没有帮助。似乎查询正在执行,成功,然后回滚更改。
答案 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)
答案 1 :(得分:0)
在任务执行之前添加一个断点,以便您可以在执行任务之前检查变量。一旦程序包在断点处停止,请使用“监视”窗口查看将在存储过程中使用的当前值。我怀疑您会发现它们与预期的有所不同。如果您从未使用过Watch,这应该可以助您一臂之力: