我有一个 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 中对其进行了测试。
有人遇到过这个吗?是否有我应该更改的设置以允许这种更改?
提前致谢