我在启动SQL Server事务并尝试提交该事务时遇到了问题。
这段代码可以不用 BEGIN TRANSACTION 和 COMMIT,但我不知道为什么。
提前感谢。
DECLARE @return_value int,
@ERROR_MESSAGE nvarchar(2000)
BEGIN TRANSACTION
EXEC @return_value = [dbo].[SEND_EMAIL]
@SUBJECT = N'subject',
@BODY = N'body',
@RECEIVERS = N'user@email.com',
@ERROR_MESSAGE = @ERROR_MESSAGE OUTPUT
SELECT @ERROR_MESSAGE AS N'@ERROR_MESSAGE'
COMMIT TRANSACTION
SELECT 'Return Value' = @return_value
GO
这是需要翻译的内容:
OLE DB提供程序“OraOLEDB.Oracle”为链接服务器“linked_server”返回消息“无法加入事务。”。
(1行受影响)
Msg 3930,级别16,状态1,第16行
当前事务无法提交,并且不能支持写入日志文件的操作。回滚事务。(1行受影响)
Msg 3998,级别16,状态1,第3行
批处理结束时检测到未提交的事务。事务被回滚。
我在SQL Server中的存储过程如下:
BEGIN TRY
EXECUTE('Call Schema.Package.StoredProcedure(?,?,?,?,?)', @subject, @body, @receivers, @vcSendBy, @ERROR_MESSAGE OUT) AT [linked_server]
END TRY
BEGIN CATCH
SET @ERROR_MESSAGE = error_meessage();
END CATCH
这段代码可以不用 BEGIN TRANSACTION 和 COMMIT,但我不知道为什么。
提前感谢。