SQL Server 2005 में SQL क्वेरी का उपयोग करके तालिका में कॉलम ऑर्डर कैसे बदलें?
मैं SQL क्वेरी का उपयोग करके तालिका में स्तंभ क्रम को पुनर्व्यवस्थित करना चाहता हूं।
SQL Server 2005 में SQL क्वेरी का उपयोग करके तालिका में कॉलम ऑर्डर कैसे बदलें?
मैं SQL क्वेरी का उपयोग करके तालिका में स्तंभ क्रम को पुनर्व्यवस्थित करना चाहता हूं।
जवाबों:
आप नहीं कर सकते। कॉलम ऑर्डर सिर्फ एक "कॉस्मेटिक" चीज है, जिसकी हम मनुष्यों को परवाह है - SQL सर्वर के लिए, यह लगभग हमेशा अप्रासंगिक है।
जब आप स्तंभ क्रम बदलते हैं, तो SQL सर्वर प्रबंधन स्टूडियो पृष्ठभूमि में क्या करता है, एक नई CREATE TABLEकमांड के साथ स्क्रैच से तालिका को फिर से बना रहा है, पुरानी तालिका से डेटा की प्रतिलिपि बना रहा है, और फिर इसे छोड़ रहा है।
स्तंभ आदेश को परिभाषित करने के लिए कोई SQL कमांड नहीं है।
INSERTस्पष्ट रूप से अपने कॉलम वैसे भी निर्दिष्ट किए बिना!
आपको फ़ील्ड को स्पष्ट रूप से उस क्रम में सूचीबद्ध करना होगा जिस क्रम में आप चाहते हैं कि उन्हें 'डिफ़ॉल्ट' क्रम के लिए उपयोग करने के बजाय लौटाया जाए।
मूल प्रश्न:
select * from foobar
रिटर्न
foo bar
--- ---
1 2
अब लिखें
select bar, foo from foobar
bar foo
--- ---
2 1
http://msdn.microsoft.com/en-us/library/aa337556.aspx के अनुसार
यह कार्य Transact-SQL स्टेटमेंट का उपयोग करके समर्थित नहीं है।
खैर, यह komma8.komma1 द्वारा उत्तर के रूप में create/ कॉपी / drop/ नाम का उपयोग करके किया जा सकता है
या आप SQL सर्वर प्रबंधन स्टूडियो का उपयोग कर सकते हैं
- में वस्तु एक्सप्लोरर , आप पुनः क्रमित करना चाहते कॉलम के साथ तालिका राइट क्लिक करें और क्लिक करें डिजाइन (ver में संशोधित। 2005 SP1 या पुराने)
- स्तंभ नाम के बाईं ओर स्थित उस बॉक्स का चयन करें जिसे आप पुनः व्यवस्थित करना चाहते हैं। (आप अपने कीबोर्ड पर [शिफ्ट] या [ctrl] कीज़ दबाकर कई कॉलम चुन सकते हैं।)
- तालिका के भीतर कॉलम को दूसरे स्थान पर खींचें।
फिर save पर क्लिक करें। यह विधि वास्तव में तालिका को गिराती है और पुन: निर्मित करती है, इसलिए कुछ त्रुटियां हो सकती हैं।
यदि डेटाबेस और तालिका के लिए परिवर्तन ट्रैकिंग विकल्प सक्षम है, तो आपको इस पद्धति का उपयोग नहीं करना चाहिए।
यदि इसे अक्षम कर दिया गया है, तो टूल मेनू> विकल्प> डिज़ाइनर में टेबल री-क्रिएशन विकल्प की आवश्यकता वाले परिवर्तनों को रोकना रोकना चाहिए, अन्यथा "सेविंग चेंजेज इज नॉट इज नॉट" त्रुटि उत्पन्न होगी।
प्राथमिक और विदेशी कुंजी निर्माण के दौरान समस्याएं भी उत्पन्न हो सकती हैं।
यदि उपरोक्त में से कोई भी त्रुटि होती है, तो बचत विफल हो जाती है जो आपको मूल कॉलम क्रम के साथ छोड़ देती है।
This task cannot be performed using Transact-SQL statements.दस्तावेज़ में " " कथन गलत था। मैंने लेखक को समझाया और उसे " This task is not supported using Transact-SQL statements." में बदलने के लिए कहा । लगभग एक दिन पहले, लेखक सहमत हो गया और दस्तावेज़ तय हो गया। GitHub पर हमारे द्वारा की गई चर्चा का अनुसरण कर सकते हैं ।
यह एक प्रश्न के परिणाम में रिकॉर्ड के आदेश पर सवाल के समान है .. और आम तौर पर कोई भी औपचारिक रूप से सही; 1; 24 पसंद नहीं करता है;
तो यहाँ यह जाता है:
select *किसी विशेष क्रम में कॉलम को वापस करने के लिए मजबूर नहीं करता हैcreate table' or in theपरिवर्तन तालिका में `विवरण जोड़ें 'आप बेशक एक sql स्टेटमेंट में कॉलम के क्रम को बदल सकते हैं। हालाँकि यदि आप तालिकाओं के भौतिक स्तंभ क्रम को सार करना चाहते हैं, तो आप एक दृश्य बना सकते हैं। अर्थात
CREATE TABLE myTable(
a int NULL,
b varchar(50) NULL,
c datetime NULL
);
CREATE VIEW vw_myTable
AS
SELECT c, a, b
FROM myTable;
select * from myTable;
a b c
- - -
select * from vw_myTable
c a b
- - -
SQLServer प्रबंधन स्टूडियो में:
उपकरण -> विकल्प -> डिजाइनर -> तालिका और डेटाबेस डिजाइनर
फिर:
SQLServer प्रबंधन स्टूडियो तालिका को छोड़ देगा और डेटा का उपयोग करके इसे फिर से बनाएगा।
आप इसे एक नई तालिका बनाकर कर सकते हैं, सभी डेटा को कॉपी कर सकते हैं, पुरानी तालिका को गिरा सकते हैं, फिर पुराने को बदलने के लिए नए का नाम बदल सकते हैं।
आप तालिका में नए कॉलम भी जोड़ सकते हैं, स्तंभ डेटा पर कॉलम की प्रतिलिपि बना सकते हैं, पुराने कॉलम को छोड़ सकते हैं, फिर पुराने कॉलम से मिलान करने के लिए नए कॉलम का नाम बदल सकते हैं। नीचे एक सरल उदाहरण: http://sqlfiddle.com/# ! -3/67af4/1
CREATE TABLE TestTable (
Column1 INT,
Column2 VARCHAR(255)
);
GO
insert into TestTable values(1, 'Test1');
insert into TestTable values(2, 'Test2');
GO
select * from TestTable;
GO
ALTER TABLE TestTable ADD Column2_NEW VARCHAR(255);
ALTER TABLE TestTable ADD Column1_NEW INT;
GO
update TestTable
set Column1_NEW = Column1,
Column2_NEW = Column2;
GO
ALTER TABLE TestTable DROP COLUMN Column1;
ALTER TABLE TestTable DROP COLUMN Column2;
GO
sp_rename 'TestTable.Column1_NEW', 'Column1', 'COLUMN';
GO
sp_rename 'TestTable.Column2_NEW', 'Column2', 'COLUMN';
GO
select * from TestTable;
GO
SQLServer प्रबंधन स्टूडियो में:
Tools-> Options-> Designers->Table and Database Designers
अचयनित करना Prevent saving changes that require table re-creation।
अब आप तालिका को फिर से व्यवस्थित कर सकते हैं।
Sql सर्वर आंतरिक रूप से स्क्रिप्ट का निर्माण करता है। यह नए परिवर्तनों के साथ एक अस्थायी तालिका बनाता है और डेटा की प्रतिलिपि बनाता है और वर्तमान तालिका को छोड़ता है और अस्थायी तालिका से तालिका सम्मिलित को फिर से बनाता है। मैं इसे "Generate Change script" विकल्प ssms 2014 से ढूँढता हूँ। इस तरह से स्क्रिप्ट। से यहाँ: किसी तालिका में स्तंभ क्रम बदलने के लिए एसक्यूएल क्वेरी का उपयोग
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_emps
(
id int NULL,
ename varchar(20) NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_emps SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.emps)
EXEC('INSERT INTO dbo.Tmp_emps (id, ename)
SELECT id, ename FROM dbo.emps WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.emps
GO
EXECUTE sp_rename N'dbo.Tmp_emps', N'emps', 'OBJECT'
GO
COMMIT
यदि आपकी तालिका में पर्याप्त कॉलम हैं तो आप यह कोशिश कर सकते हैं। पहले कॉलम के पसंदीदा क्रम के साथ एक नई तालिका बनाएं।
create table new as select column1,column2,column3,....columnN from table_name;
अब ड्रॉप कमांड का उपयोग करके टेबल को ड्रॉप करें
drop table table_name;
अब अपनी पुरानी तालिका के नाम पर नई बनाई गई तालिका का नाम बदलें।
rename new to table_name;
अब तालिका का चयन करें, आपके पास अपने कॉलमों को फिर से व्यवस्थित करना है जैसा आपने पहले पसंद किया था।
select * from table_name;
दिन के अंत में, आप बस MS SQL में ऐसा नहीं कर सकते। मैंने हाल ही में एक संग्रहीत कार्यविधि का उपयोग करते हुए जाने (एप्लिकेशन स्टार्टअप) पर तालिकाएँ बनाईं जो लुकअप टेबल से पढ़ती हैं। जब मैंने एक ऐसा दृश्य बनाया, जिसे मैंने किसी अन्य तालिका के साथ जोड़ दिया था, तो मैंने मैन्युअल रूप से पहले एक (एक ही स्कीमा, डेटा के साथ) बनाया था, यह विफल रहा - केवल इसलिए कि मैं दृश्य के लिए '' चयन करें * चयन करें * का उपयोग कर रहा था। उसी समय, यदि मैं केवल संग्रहीत प्रक्रिया के माध्यम से बनाए गए का उपयोग करता हूं, तो मैं सफल हूं।
निष्कर्ष में: यदि कोई एप्लिकेशन है जो कॉलम के आदेश पर निर्भर करता है तो यह वास्तव में अच्छी प्रोग्रामिंग नहीं है और भविष्य में समस्याओं को सुनिश्चित करने के लिए होगा। कॉलम को कहीं भी होने के लिए स्वतंत्र महसूस करना चाहिए और किसी भी डेटा प्रक्रिया (INSERT, UPDATE, SELECT) के लिए उपयोग किया जाना चाहिए।
आप इन चरणों के साथ इसे प्राप्त कर सकते हैं:
मूल तालिका के सभी विदेशी कुंजी और प्राथमिक कुंजी को हटा दें।
मूल तालिका का नाम बदलें।
CTAS का उपयोग करके आप चाहते हैं कि मूल तालिका बनाएं।
पुरानी मेज को गिराओ।
सभी बाधाओं को मूल तालिका पर वापस लागू करें
यदि हाल ही में बनाए जाने वाले स्तंभ हाल ही में बनाए गए हैं और खाली हैं, तो स्तंभों को हटाकर सही क्रम में फिर से जोड़ा जा सकता है।
यह मेरे साथ हुआ, नई कार्यक्षमता जोड़ने के लिए मैन्युअल रूप से एक डेटाबेस का विस्तार करना, और मैं एक कॉलम से चूक गया था, और जब मैंने इसे जोड़ा, तो अनुक्रम गलत था।
यहाँ कोई पर्याप्त समाधान नहीं मिलने के बाद मैंने निम्न प्रकार के आदेशों का उपयोग करके तालिका को ठीक किया।
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
नोट: केवल यह करें यदि आपके पास उन कॉलमों में डेटा नहीं है जिन्हें आप छोड़ रहे हैं।
लोगों ने कहा है कि कॉलम ऑर्डर मायने नहीं रखता। मैं डेटाबेस के स्कीमा का पाठ संस्करण बनाने के लिए नियमित रूप से SQL सर्वर प्रबंधन स्टूडियो "स्क्रिप्ट तैयार करता हूं" का उपयोग करता हूं। इन लिपियों (git) को प्रभावी रूप से नियंत्रित करने और उनकी (WinMerge) तुलना करने के लिए, यह जरूरी है कि संगत डेटाबेस से आउटपुट समान हो, और हाइलाइट किए गए अंतर वास्तविक डेटाबेस अंतर हैं।
कॉलम ऑर्डर मायने रखता है; लेकिन सिर्फ कुछ लोगों के लिए, हर किसी के लिए नहीं!
मुझे लगता है कि आप एक विशिष्ट स्थिति में एक नया कॉलम जोड़ना चाहते हैं। आप वर्तमान कॉलम को दाईं ओर ले जाकर एक नया कॉलम बना सकते हैं।
+---+---+---+
| A | B | C |
+---+---+---+
सभी प्रभावित अनुक्रमित और विदेशी कुंजी संदर्भ निकालें। अंतिम कॉलम जैसे सटीक डेटा प्रकार के साथ एक नया कॉलम जोड़ें और वहां डेटा कॉपी करें।
+---+---+---+---+
| A | B | C | C |
+---+---+---+---+
|___^
तीसरे कॉलम के डेटा प्रकार को पिछले कॉलम की तरह ही बदलें और वहां डेटा कॉपी करें।
+---+---+---+---+
| A | B | B | C |
+---+---+---+---+
|___^
तदनुसार कॉलम का नाम बदलें, हटाए गए अनुक्रमित और विदेशी कुंजी संदर्भों को पुन: बनाएँ
+---+---+---+---+
| A | D | B | C |
+---+---+---+---+
दूसरा कोलम का डेटा प्रकार बदलें।
ध्यान रखें कि कॉलम ऑर्डर केवल एक "कॉस्मेटिक" चीज है जैसे कि marc_s ने कहा है ।
उपयोग
SELECT * FROM TABLE1
जो तालिका के डिफ़ॉल्ट स्तंभ क्रम को प्रदर्शित करता है।
यदि आप कॉलम का क्रम बदलना चाहते हैं।
समान रूप से प्रदर्शित करने के लिए कॉलम नाम निर्दिष्ट करें
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
आप SQL क्वेरी का उपयोग करके इसे बदल सकते हैं। कॉलम के अनुक्रम को बदलने के लिए यहां sql क्वेरी है।
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
एक विशिष्ट कॉलम ऑर्डर करने के लिए आपको अपनी इच्छानुसार कॉलम में कॉलम का चयन करना होगा। चयन आदेश यह बताता है कि आउटपुट में कॉलम कैसे ऑर्डर किए जाएंगे।
इस आदेश का प्रयास करें:
alter table students modify age int(5) first;
यह उम्र की स्थिति को पहली स्थिति में बदल देगा।
उदाहरण: तालिका स्थिति में field_price के बाद field_priority की स्थिति बदलें।
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;