以下のクエリを使用して、データベースから顧客の詳細を取得しました。トランザクションが開いているときにSQLクエリのタイムアウトエラーを回避する方法はありますか?
方法1:
BEGIN TRAN
IF EXISTS(SELECT TOP 1 'X' From CUSTOMER Where CustId = @Code AND Status = 'D')
BEGIN
UPDATE CUSTOMER
SET Status = 'L'
WHERE CustId = @BorrowerCode AND ISNULL(Borrower,'') = 'Y'
SELECT CustId, MobileNo, PlaceDesc
FROM CUSTOMER C
JOIN PLACE P ON C.FKID = P.Pk_Id
WHERE Cust_Id = @Code AND C.Status = 'L'
END
COMMIT TRAN
方法2:
BEGIN TRAN
IF EXISTS(SELECT TOP 1 'X' From CUSTOMER Where CustId = @Code AND Status = 'D')
BEGIN
UPDATE CUSTOMER
SET Status = 'L'
WHERE CustId = @BorrowerCode AND ISNULL(Borrower,'') = 'Y'
SELECT CustId, MobileNo, PlaceDesc
FROM CUSTOMER C With(NoLock)
JOIN PLACE P With(NoLock) ON C.FKID = P.Pk_Id
WHERE Cust_Id = @Code AND C.Status = 'L'
END
COMMIT TRAN
、データベース内のオープン・トランザクションがある場合は、方法1のタイムアウトで失敗するクエリでは、それはですトランザクション内でNoLockを使用するのは良い方法ですか?
UPDATE CUSTOMER
SET Status = 'L'
WHERE CustId = @BorrowerCode AND Borrower = 'Y'
2.Timeうちはかなり巨大な制限があるの下にすべての更新の
1.Firstが検索引数可能ではありません
'SETトランザクション分離レベルをSNAPSHOT' – Devart
@Devart、方法1でTRANSACTION ISOLATION LEVEL SNAPSHOTを使用すると、クエリのタイムアウトは発生しませんか?それが正しいか? – RGS
[悪い習慣を蹴って - どこにでもNOLOCKを置く](http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - これはすべての場所でこれを使用することを推奨しません*** - かなり反対! –