Sql 执行更新存储过程时出现并发问题
当一个存储过程被两个或多个实例同时执行时,我会遇到这个错误 对系统版本表“dbo.table”的数据修改失败,因为受影响记录的事务时间早于时段开始时间Sql 执行更新存储过程时出现并发问题,sql,sql-server,error-handling,Sql,Sql Server,Error Handling,当一个存储过程被两个或多个实例同时执行时,我会遇到这个错误 对系统版本表“dbo.table”的数据修改失败,因为受影响记录的事务时间早于时段开始时间 如何以最有效的方式防止此错误发生?dbo.Table未在过程中引用。表别名b和d被引用,但没有分配给任何表。 ALTER PROCEDURE [dbo].[UpdateColumn] @ChangeColumn int, @column3 uniqueidentifier
如何以最有效的方式防止此错误发生?dbo.Table未在过程中引用。表别名b和d被引用,但没有分配给任何表。
ALTER PROCEDURE [dbo].[UpdateColumn]
@ChangeColumn int,
@column3 uniqueidentifier
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION
BEGIN TRY
UPDATE d
SET changecolumn = @ChangeColumn
FROM dbo.table2 a
INNER JOIN dbo.table3 ON a.column2 = b.column2
AND b.column3 = @column3
COMMIT;
END TRY
BEGIN CATCH
IF (XACT_STATE()) = 1
BEGIN
SELECT 'ERROR - The action was unsuccessful.' as MSG
ROLLBACK TRANSACTION
END
INSERT INTO dbo.catcherror (UserName, ErrorNumber, ErrorState,
ErrorSeverity, ErrorLine, ErrorProcedure,
ErrorMessage, ErrorDateTime,
DatabaseName, SPID, ErrorDetails)
VALUES (@AuditUserName, ERROR_NUMBER(), ERROR_STATE(),
ERROR_SEVERITY(), ERROR_LINE(), ERROR_PROCEDURE(),
ERROR_MESSAGE(), GETUTCDATE(),
DB_NAME(), @@SPID,
(CONCAT('@ChangeColumn:', ' ' , @ChangeColumn) + CONCAT('@column3d:', ' ' , @column3)))
IF (XACT_STATE()) = 1
BEGIN
PRINT N'The transaction is committable.' +
'Committing transaction.'
COMMIT TRANSACTION;
END;
END CATCH
END