如何通过SQL Server 2014中的C#来解决嵌入式SQL中的死锁问题? [英] How to over come from deadlock in embedded SQL through C# in SQL Server 2014?

查看:112
本文介绍了如何通过SQL Server 2014中的C#来解决嵌入式SQL中的死锁问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



当在MS SQL Server 2014中通过C#编程语言调用嵌入式SQL时,我在Dispatching.PackageTrace表上遇到死锁问题。 />




以下是数据库中的表格设计:



CREATE TABLE [调度]。[PackageTrace](

[PackageID] [uniqueidentifier] ROWGUIDCOL NOT NULL,

[PartitionID] [numeric](26,0)NULL,

[管道] [nvarchar](255)NOT NULL,

PRIMARY KEY CLUSTERED



[PackageID] ASC






如果存在(SELECT * FROM Dispatching.PackageTrace WHERE PackageID ='klaslndsskok230m')

BEGIN

UPDATE [Dispatching]。[PackageTrace] SET [Conduit] = @Conduit

WHERE [PackageID] ='klaslndsskok230m'

END

ELSE

BEGIN

INSERT INTO [Dispatching]。[PackageTrace]([PackageID],[PartitionID],[Conduit] )

VALUES(@ PackageID,@ PartignID,@ Conduit

结束





建议真的很感激来自死锁问题。



提前谢谢。

--Raj

Hi All,

I am facing deadlock problem on Dispatching.PackageTrace table when below Embedded SQL is invoked through C# programming language in MS SQL Server 2014.


Below is the table design in Database:

CREATE TABLE [Dispatching].[PackageTrace](
[PackageID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[PartitionID] [numeric](26, 0) NULL,
[Conduit] [nvarchar](255) NOT NULL,
PRIMARY KEY CLUSTERED
(
[PackageID] ASC
)


IF EXISTS(SELECT * FROM Dispatching.PackageTrace WHERE PackageID = 'klaslndsskok230m')
BEGIN
UPDATE [Dispatching].[PackageTrace] SET [Conduit] = @Conduit
WHERE [PackageID] = 'klaslndsskok230m'
END
ELSE
BEGIN
INSERT INTO [Dispatching].[PackageTrace] ([PackageID] ,[PartitionID] ,[Conduit] )
VALUES (@PackageID, @PartitionID, @Conduit)
END


Suggestions really appreciated to over come from deadlock problem.

Thank you in advance.
--Raj

推荐答案

尝试使用nolock语句编写select查询。它应该会改善你的情况。否则此部分将在运行时阻止整个表格导致死锁。



SELECT * FROM Dispatching.PackageTrace(NOLOCK)WHERE PackageID ='klaslndsskok230m'
Try to write your select query with a nolock statement. It should improve your situation a lot. Otherwise this part will block the entire table when running causing deadlocks.

SELECT * FROM Dispatching.PackageTrace (NOLOCK) WHERE PackageID = 'klaslndsskok230m'


这篇关于如何通过SQL Server 2014中的C#来解决嵌入式SQL中的死锁问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆