小编Kev*_*vin的帖子

SQL 死锁 - 同时调用相同的存储过程

我正在使用一个相对复杂的系统,其中根据需要从多个数据源更新静态表,因为动态加载数据需要 4-5 秒,我们更喜欢快速向用户显示结果。

过程:

  1. 用户或应用程序打开特定订单
  2. 调用存储过程来检索数据(我们称之为 dbo.Get_Data)
  3. dbo.Get_Data 检查事件日志以查看自上次查找数据以来是否有任何更改
  4. 如果它发现一个新事件,它会运行昂贵的查询来更新数据
  5. 数据返回
IF (    SELECT [LastStaticUpdateEvent] < [LastSaveEvent] 
        FROM [dbo].[Events] 
        WHERE [OrderNumber] = @OrderNumber
    )
    BEGIN
       -- Update Static table
       UPDATE [Static]
       SET [Static].[A] = [App].[A]
          ,[Static].[B] = [App].[B]
       FROM [dbo].[AppData]            AS [App]   -- View with many joins (4-5 secs)
       INNER JOIN [dbo].[StaticResuts] AS [Static]
           ON [Static].[OrderNumber] = [App].[OrderNumber]
       WHERE [App].[OrderNumber] = @OrderNumber

       -- Update Event Log
       UPDATE [dbo].[Events]
       SET [LastStaticUpdateVent] = SYSDATETIME()
       WHERE [OrderNumber] = @OrderNumber

    END

SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock stored-procedures update

3
推荐指数
1
解决办法
707
查看次数

标签 统计

deadlock ×1

sql-server ×1

stored-procedures ×1

update ×1