बहुत समान प्रश्न पहले पूछा गया था।
आप एक ORDER BY
निर्दिष्ट कर सकते हैं INSERT
. में ।
यदि आप ऐसा करते हैं, तो जिस क्रम में IDENTITY
जेनरेट किए गए मान निर्दिष्ट ORDER BY
. से मेल खाने की गारंटी है INSERT
. में ।
अपने उदाहरण का उपयोग करना:
DECLARE @blah TABLE
(
ID INT IDENTITY(1, 1) NOT NULL,
Name VARCHAR(100) NOT NULL
);
INSERT INTO @blah (Name)
SELECT T.Name
FROM
(
VALUES
('Timmy'),
('Jonny'),
('Sally')
) AS T(Name)
ORDER BY T.Name;
SELECT
T.ID
,T.Name
FROM @blah AS T
ORDER BY T.ID;
नतीजा यह है:
+----+-------+
| ID | Name |
+----+-------+
| 1 | Jonny |
| 2 | Sally |
| 3 | Timmy |
+----+-------+
यानी Name
क्रमित कर दिया गया है और इस आदेश के अनुसार आईडी सृजित कर दी गई हैं। यह गारंटी है कि जॉनी के पास सबसे कम आईडी होगी, टिम्मी के पास सबसे ज्यादा आईडी होगी, सैली के बीच आईडी होगी। जेनरेट किए गए आईडी मानों के बीच अंतराल हो सकता है, लेकिन उनके सापेक्ष क्रम की गारंटी है।
यदि आप ORDER BY
निर्दिष्ट नहीं करते हैं INSERT
. में , फिर परिणामी IDENTITY
आईडी को एक अलग क्रम में जनरेट किया जा सकता है।
ध्यान रहे, ORDER BY
के साथ भी तालिका में पंक्तियों के वास्तविक भौतिक क्रम की कोई गारंटी नहीं है। INSERT
. में , जेनरेट की गई आईडी ही एकमात्र गारंटी है।
एक प्रश्न में इन्टर इनटू को सेलेक्ट के साथ ऑर्डर बाय के साथ करें एमएस से उमाचंदर जयचंद्रन ने कहा:
और उन्होंने आदेश देने का लिंक दिया SQL सर्वर में गारंटी , जहां SQL सर्वर इंजन टीम के कॉनर कनिंघम कहते हैं:
उस पोस्ट में टिप्पणियों में एमएस नॉलेज बेस लेख का लिंक है:का व्यवहार IDENTITY फ़ंक्शन जब SELECT INTO या INSERT के साथ उपयोग किया जाता है .. ऐसे प्रश्नों का चयन करें जिनमें ORDER BY क्लॉज हो , जो इसे और अधिक विवरण में बताता है। यह कहता है:
मैं इस KB आलेख को एक आधिकारिक दस्तावेज़ के रूप में मानूंगा और इस व्यवहार की गारंटी पर विचार करूंगा।