तालिका में पंक्तियाँ हैं अनियंत्रित, इसलिए पंक्तियों के क्रम में होने के बारे में बात करने का कोई मतलब नहीं है। और, जब तक आप order by
. का उपयोग नहीं करते हैं, तब तक किसी क्वेरी से सेट किया गया परिणाम अनियंत्रित होता है खंड।
उस ने कहा, आप एक क्रमबद्ध तरीके से पंक्तियों को तालिका में रखने का समान प्रभाव डाल सकते हैं। यहाँ एक विधि है।
select top 0 *
into new_table
from existing_table;
alter table new_table add new_table_id int identity(1, 1);
insert into new_table(<list of columns without new_table_id>)
SELECT <list of columns without new_table_id>
INTO new_table
FROM existing_table
ORDER BY col1, col2;
आईडी कॉलम सही क्रम में होने की गारंटी है। व्यवहार में, ऐसा लगता है कि पंक्तियों को क्रम में डाला जाएगा। कड़ाई से बोलते हुए, सम्मिलित आदेश की गारंटी नहीं है, हालांकि आईडी के मूल्यों को सही ढंग से आदेश दिया गया है।
जैसा कि टिप्पणी में बताया गया है, आप यह भी कर सकते हैं:
alter table new_table add new_table_id int identity(1, 1) not null primary key;
आप ऐसा कर सकते हैं क्योंकि टेबल खाली है। प्राथमिक कुंजी के रूप में, डेटा क्रम में डाला जाना चाहिए।
हालांकि, एक नोट के रूप में। प्रश्न:
select *
from new_table;
परिणामों के क्रम की गारंटी नहीं देता है। इससे कोई फर्क नहीं पड़ता कि तालिका में सम्मिलित आदेश क्या है। आप किसी विशेष क्रम में होने वाले परिणामों पर निर्भर नहीं कर सकते हैं क्योंकि पंक्तियों को इस तरह से आदेश दिया गया था। उदाहरण के लिए, बहु-थ्रेडेड वातावरण में, परिणाम आम तौर पर नहीं होंगे क्रम में हो, या तो सिद्धांत में या व्यवहार में।