Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में "पंक्ति संस्करण" क्या है?

SQL सर्वर में, पंक्ति संस्करण एक डेटा प्रकार है जो एक डेटाबेस के भीतर स्वचालित रूप से उत्पन्न, अद्वितीय बाइनरी नंबरों को उजागर करता है। यह आपको एक अद्वितीय मान के साथ तालिका पंक्तियों को संस्करण-स्टाम्प करने की अनुमति देता है। यह डेटाबेस की अखंडता को बनाए रखने में मदद करता है जब कई उपयोगकर्ता एक ही समय में पंक्तियों को अपडेट कर रहे होते हैं।

प्रत्येक SQL सर्वर डेटाबेस में एक काउंटर होता है जो प्रत्येक इंसर्ट या अपडेट ऑपरेशन के लिए बढ़ा हुआ होता है जो उस तालिका पर किया जाता है जिसमें पंक्ति संस्करण वाला कॉलम होता है डेटा प्रकार (या इसका टाइमस्टैम्प समानार्थी, जिसे पदावनति के लिए ध्वजांकित किया गया है)।

यदि किसी तालिका में पंक्ति संस्करण . है (या टाइमस्टैम्प ) कॉलम, जब भी कोई पंक्ति डाली या अपडेट की जाती है, पंक्ति संस्करण . का मान कॉलम वर्तमान पंक्ति संस्करण मान पर सेट है। यह सच है, तब भी जब कोई UPDATE कथन के परिणामस्वरूप डेटा में कोई परिवर्तन नहीं होता है।

उदाहरण 1 - एक पंक्ति संस्करण कॉलम के साथ एक तालिका बनाएं

यहां पंक्ति संस्करण . के साथ तालिका बनाने का एक उदाहरण दिया गया है कॉलम।

CREATE DATABASE Test_rowversion;
USE Test_rowversion;
CREATE TABLE Pet (
    PetId int IDENTITY(1,1) PRIMARY KEY, 
    PetName varchar(255),
    VersionStamp rowversion
    );

SELECT @@DBTS AS Before;

INSERT INTO Pet (PetName)
VALUES ('Max');

SELECT @@DBTS AS After;

परिणाम:

Commands completed successfully.
Changed database context to 'Test_rowversion'.
Commands completed successfully.
+--------------------+
| Before             |
|--------------------|
| 0x00000000000007D0 |
+--------------------+
(1 row affected)
(1 row affected)
+--------------------+
| After              |
|--------------------|
| 0x00000000000007D1 |
+--------------------+
(1 row affected)

परिणामों में "पहले" और "बाद" मानों पर एक नज़र डालें। यह वर्तमान पंक्ति संस्करण . का प्रतिनिधित्व करता है मूल्य।

इस मामले में मैंने एक नया डेटाबेस और तालिका, और पंक्ति संस्करण . बनाया मान 0x00000000000007D0 . से शुरू हुआ . मेरे द्वारा एक पंक्ति डालने के बाद, पंक्ति संस्करण 0x00000000000007D1 . तक बढ़ा दिया गया था ।

उदाहरण 2 - अपडेट

जैसा कि बताया गया है, पंक्ति संस्करण जब आप कोई अपडेट करते हैं तो मान भी बढ़ जाता है।

उदाहरण:

SELECT * FROM Pet;

UPDATE Pet
SET PetName = 'Maxine'
WHERE PetId = 1;

SELECT * FROM Pet;

परिणाम:

+---------+-----------+--------------------+
| PetId   | PetName   | VersionStamp       |
|---------+-----------+--------------------|
| 1       | Max       | 0x00000000000007D1 |
+---------+-----------+--------------------+
(1 row affected)
(1 row affected)
+---------+-----------+--------------------+
| PetId   | PetName   | VersionStamp       |
|---------+-----------+--------------------|
| 1       | Maxine    | 0x00000000000007D2 |
+---------+-----------+--------------------+
(1 row affected)

यहां, मैं PetName को अपडेट करता हूं कॉलम, और VersionStamp कॉलम (पंक्ति संस्करण ) को 0x00000000000007D2 . तक बढ़ा दिया गया है ।

उदाहरण 3 - बिना किसी बदलाव वाले अपडेट

पंक्ति संस्करण . के बारे में अच्छी बातों में से एक यह है कि यह सभी UPDATE पर बढ़ा हुआ है संचालन कोई परिवर्तन न होने पर भी .

उदाहरण के लिए, यदि मैं पिछला कोड फिर से चलाता हूं, तो VersionStamp . का मान स्तंभ अभी भी बदलता है, भले ही कोई परिवर्तन न हुआ हो:

SELECT * FROM Pet;

UPDATE Pet
SET PetName = 'Maxine'
WHERE PetId = 1;

SELECT * FROM Pet;

परिणाम:

+---------+-----------+--------------------+
| PetId   | PetName   | VersionStamp       |
|---------+-----------+--------------------|
| 1       | Maxine    | 0x00000000000007D2 |
+---------+-----------+--------------------+
(1 row affected)
(1 row affected)
+---------+-----------+--------------------+
| PetId   | PetName   | VersionStamp       |
|---------+-----------+--------------------|
| 1       | Maxine    | 0x00000000000007D3 |
+---------+-----------+--------------------+
(1 row affected)

PetId . का मान और PetName कॉलम नहीं बदले, लेकिन VersionStamp कॉलम बढ़ा दिया गया था।

उदाहरण 4 - टाइमस्टैम्प डेटा प्रकार

टाइमस्टैम्प डेटा प्रकार पंक्ति संस्करण . का पर्याय है . हालांकि, टाइमस्टैम्प SQL सर्वर के भविष्य के संस्करण में बहिष्करण के लिए ध्वजांकित किए गए डेटा प्रकारों में से एक है। अप्रत्याशित रूप से, Microsoft नए विकास कार्य में इस सुविधा का उपयोग करने से बचने और वर्तमान में इस सुविधा का उपयोग करने वाले अनुप्रयोगों को संशोधित करने की योजना बनाने की अनुशंसा करता है।

इसलिए, यदि आपका सामना ऐसे डेटाबेस से होता है जो टाइमस्टैम्प . का उपयोग करता है डेटा प्रकार, आप इसे पंक्ति संस्करण . में बदलने के बारे में सोच सकते हैं ।

केवल प्रदर्शन उद्देश्यों के लिए, यहां टाइमस्टैम्प . का उपयोग करने वाले पहले उदाहरण में संशोधन किया गया है पंक्ति संस्करण . के बजाय :

CREATE DATABASE Test_timestamp;
USE Test_timestamp;
CREATE TABLE Pet (
    PetId int IDENTITY(1,1) PRIMARY KEY, 
    PetName varchar(255),
    timestamp
    );

SELECT @@DBTS AS Before;

INSERT INTO Pet (PetName)
VALUES ('Max');

SELECT @@DBTS AS After;

परिणाम:

Commands completed successfully.
Changed database context to 'Test_timestamp'.
Commands completed successfully.
+--------------------+
| Before             |
|--------------------|
| 0x00000000000007D0 |
+--------------------+
(1 row affected)
(1 row affected)
+--------------------+
| After              |
|--------------------|
| 0x00000000000007D1 |
+--------------------+
(1 row affected)

और जब हम इस पर काम कर रहे हों, तो यहां टाइमस्टैम्प . के लिए संशोधित किया गया अगला उदाहरण दिया गया है :

SELECT * FROM Pet;

UPDATE Pet
SET PetName = 'Maxine'
WHERE PetId = 1;

SELECT * FROM Pet;

परिणाम:

+---------+-----------+--------------------+
| PetId   | PetName   | timestamp          |
|---------+-----------+--------------------|
| 1       | Max       | 0x00000000000007D1 |
+---------+-----------+--------------------+
(1 row affected)
(1 row affected)
+---------+-----------+--------------------+
| PetId   | PetName   | timestamp          |
|---------+-----------+--------------------|
| 1       | Maxine    | 0x00000000000007D2 |
+---------+-----------+--------------------+
(1 row affected)

आपने देखा होगा कि मैंने वास्तव में टाइमस्टैम्प . के लिए कोई नाम नहीं दिया था कॉलम। यदि आप कॉलम नाम निर्दिष्ट नहीं करते हैं, तो SQL सर्वर डेटाबेस इंजन टाइमस्टैम्प . उत्पन्न करता है कॉलम का नाम।

हालांकि, पंक्ति संस्करण इस सिंटैक्स की अनुमति नहीं देता है, इसलिए पंक्ति संस्करण . का उपयोग करते समय आपको कॉलम नाम निर्दिष्ट करना होगा ।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर रोलअप के साथ योग - लेकिन केवल अंतिम सारांश?

  2. SQL सर्वर इंस्टेंस पर सभी डेटाबेस से प्राथमिक कुंजी बाधा की सूची कैसे प्राप्त करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 60

  3. SQL सर्वर में एक तालिका का नाम बदलें (T-SQL)

  4. SQLDiag टूल का उपयोग करके प्रदर्शन डेटा एकत्र करें | SQL सर्वर प्रदर्शन समस्या निवारण -6

  5. SQL सर्वर में किसी दिनांक को छोटा करने का सबसे अच्छा तरीका क्या है?