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" 无法启动分布式事务。