Ole db 命令和事务。一般错误

Posted

技术标签:

【中文标题】Ole db 命令和事务。一般错误【英文标题】:Ole db command & transactions. General Error 【发布时间】:2013-02-07 10:09:00 【问题描述】:

我有一个 OLE DB 命令,它最初包含一个简单的三行更新:

更新 raw_CommissionPaid 设置 PolicyNumber = ?其中 PolicyNumber = ?

这很好用,完全符合预期,一切都很好。

我最近决定,虽然这有可能出错并造成很大的损害,所以我决定将它全部放在一个事务中,监控受影响的行,如果它的变化超出我的预期,则回滚,所以我将我的更新更改为:

BEGIN TRY BEGIN TRAN UpdateCommissionsPaidPolNo

更新 raw_CommissionPaid 设置 PolicyNumber = ?其中 PolicyNumber = ?

IF @@ROWCOUNT 1 RAISERROR('行数 1', 11, 1)

COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN UpdateCommissionsPaidPolNo

  PRINT 'UpdateCommissionsPaidPolicyNumber script failed'

  SELECT
        ERROR_MESSAGE() as ErrorMessage            END CATCH

但是,这给了我通常给出的“语法错误或一般错误”消息。我记得在上一期中,如果参数嵌入在其他 SQL 中,有时它无法将参数映射到?,我认为这可能是问题所在,因此将其更改为以防万一:

声明@FNumber varchar(20) 声明@LNumber varchar(20)

设置@FNumber = ?设置@LNumber = ?

BEGIN TRY BEGIN TRAN UpdateCommissionsPaidPolNo

更新 raw_CommissionPaid 设置 PolicyNumber = @FNumber 其中 PolicyNumber = @LNumber

IF @@ROWCOUNT 1 RAISERROR('行数 1', 11, 1)

COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN UpdateCommissionsPaidPolNo

  PRINT 'UpdateCommissionsPaidPolicyNumber script failed'

  SELECT
        ERROR_MESSAGE() as ErrorMessage            END CATCH

但我仍然得到:

语法错误、权限违规或其他非特定错误

我意识到这可能是因为打印,或者返回错误消息,但删除它们并没有改变任何东西,它仍然失败

我确定该 sql 是有效的,因为我在 SQL Server Management Studio 中对其进行了测试。

有人遇到过这种情况吗?是否有我应该更改的设置以允许这种更改?

提前致谢

【问题讨论】:

【参考方案1】:

在阅读This site 之后,我了解到如果我将数据流任务 TransactionOption 属性设置为支持,那么如果它失败了,它应该会自行回滚失败的部分。

有了这些知识,我想我唯一需要做的就是让它意识到正在更新的多行被视为错误。所以把它改成这样:

更新 raw_CommissionPaid 设置 PolicyNumber = ?其中 PolicyNumber = ?

IF @@ROWCOUNT 1 RAISERROR('行数 1', 11, 1)

应该让它自己回滚。

【讨论】:

以上是关于Ole db 命令和事务。一般错误的主要内容,如果未能解决你的问题,请参考以下文章

OLE DB 错误:OLE DB 或 ODBC 错误:用户 'JOE-PC\SQLAnalysis' 登录失败

SSAS:OLE DB 错误: OLE DB 或 ODBC 错误 : Login failed for user 'NT ServiceMSSQLServerOLAPService'(

无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务

无法执行该操作,因为链接服务器 "XXX" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务。

因为链接服务器 "XXXX" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务

OLE DB 或 ODBC 错误:用户 'NT AUTHORITY\NETWORK SERVICE 登录失败