आप नीचे दिखाए गए चरणों का उपयोग करके गतिरोध बना सकते हैं। सबसे पहले, नमूना डेटा के साथ वैश्विक अस्थायी तालिकाएँ बनाएँ।
--Two global temp tables with sample data for demo purposes.
CREATE TABLE ##Employees (
EmpId INT IDENTITY,
EmpName VARCHAR(16),
Phone VARCHAR(16)
)
GO
INSERT INTO ##Employees (EmpName, Phone)
VALUES ('Martha', '800-555-1212'), ('Jimmy', '619-555-8080')
GO
CREATE TABLE ##Suppliers(
SupplierId INT IDENTITY,
SupplierName VARCHAR(64),
Fax VARCHAR(16)
)
GO
INSERT INTO ##Suppliers (SupplierName, Fax)
VALUES ('Acme', '877-555-6060'), ('Rockwell', '800-257-1234')
GO
अब SSMS में दो खाली क्वेरी विंडो खोलें। सत्र 1 के लिए कोड को एक क्वेरी विंडो में और सत्र 2 के लिए कोड को दूसरी क्वेरी विंडो में रखें। फिर दो सत्रों में से प्रत्येक को चरण दर चरण निष्पादित करें, आवश्यकतानुसार दो क्वेरी विंडो के बीच आगे-पीछे करें। ध्यान दें कि प्रत्येक लेन-देन में एक संसाधन पर लॉक होता है जिसे अन्य लेनदेन भी लॉक करने का अनुरोध कर रहा है।
Session 1 | Session 2
===========================================================
BEGIN TRAN; | BEGIN TRAN;
===========================================================
UPDATE ##Employees
SET EmpName = 'Mary'
WHERE EmpId = 1
===========================================================
| UPDATE ##Suppliers
| SET Fax = N'555-1212'
| WHERE SupplierId = 1
===========================================================
UPDATE ##Suppliers
SET Fax = N'555-1212'
WHERE SupplierId = 1
===========================================================
<blocked> | UPDATE ##Employees
| SET Phone = N'555-9999'
| WHERE EmpId = 1
===========================================================
| <blocked>
===========================================================
एक गतिरोध परिणाम; एक लेन-देन समाप्त होता है और दूसरा लेन-देन निरस्त कर दिया जाता है और क्लाइंट को त्रुटि संदेश 1205 भेजा जाता है।
किसी भी खुले लेनदेन को करने (या रोलबैक) करने के लिए "सत्र 1" और "सत्र 2" के लिए एसएसएमएस क्वेरी विंडो बंद करें। अंत में, अस्थायी तालिकाओं को साफ करें:
DROP TABLE ##Employees
GO
DROP TABLE ##Suppliers
GO