首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL DeadLock示例

SQL DeadLock示例
EN

Stack Overflow用户
提问于 2017-06-15 00:06:18
回答 1查看 316关注 0票数 0

能否解释一下,这是否是SQL存储过程上的死锁的一个好例子?

代码语言:javascript
复制
BEGIN TRANSACTION MergeAccount

MERGE INTO Name AS TARGET
USING (
    SELECT @accountId, @playerName, @lastSeenDateTime
) AS SOURCE (
    [AccountId], [Name], [LastSeenDateTime]
) 
ON TARGET.[AccountId] = SOURCE.[AccountId] 
AND 
(
    SELECT TOP 1 [Name] 
    FROM [Name] 
    WHERE [AccountId] = @AccountId 
    ORDER BY [LastSeenDateTime] DESC
) = SOURCE.[Name]
WHEN NOT MATCHED BY TARGET THEN
    INSERT (
        [AccountId], [Name], [LastSeenDateTime]
    ) VALUES (
        [AccountId], [Name], [LastSeenDateTime]
    )
WHEN MATCHED AND SOURCE.LastSeenDateTime > TARGET.LastSeenDateTime THEN 
    UPDATE
    SET TARGET.LastSeenDateTime = SOURCE.LastSeenDateTime
;

COMMIT TRANSACTION MergeAccount

例如,如果您检查WHERE子句中的SELECT语句,我实际上是在请求同一用户的同一个表中的数据。

我是否应该创建一个声明,并在外部将数据接受到var中,然后应用where子句?

这样编写查询是不是不好的做法?

EN

回答 1

Stack Overflow用户

发布于 2017-06-19 19:58:54

如果您希望分析整个DeadLock场景并能够重现它。

我建议您使用TSQL_Locks模型运行SQL Server Profiler

如果发生死锁,DeadLock graph列将填充一个很好的方法来分析您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44549712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档