我面对僵局死锁在SQL Server
被死锁的锁资源与另一个进程,并已 选作死锁牺牲品。
问题在SQL-Server中,通过对特定列选择最大ID来插入数据到数据库中,然后添加一个增量获取了将插入记录的值。 我打电话的过程作为代码如下所述:
CREATE
PROCEDURE [dbo].[Web_GetMaxColumnID]
@Col_Name nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
DECLARE @MaxID BIGINT;
SET NOCOUNT ON;
-- Insert statements for procedure here
BEGIN
BEGIN TRAN
SET @MaxID = (
SELECT Col_Counter
FROM Maintenance_Counter WITH (XLOCK, ROWLOCK)
WHERE COL_NAME = @Col_Name
)
UPDATE Maintenance_Counter
SET Col_Counter = @MaxID + 1
WHERE COL_NAME = @Col_Name
COMMIT
END
SELECT (
CONVERT(
VARCHAR,
(
SELECT office_id
FROM Maintenance
)
) + '' + CONVERT(VARCHAR, (@MaxID))
) AS MaxID
END
任何一个帮助我.....
发生死锁。你必须能够让你的代码更少锁定或简单地处理它们 –
Sir先生我已经提出了一个程序。插入我只是调用该过程返回值,我插入记录。当有不同的用户在同一时间插入数据发生死锁。如果上述商店程序需要更改,我需要帮助。 –
这段代码的重点是什么?如果你想产生序列的数字使用一个SEQUENCE。它在所有支持的SQL Server版本中都可用 –