2009-04-20 7 views
28

पर एक नया टेबल कॉलम जोड़ें SQL सर्वर में किसी विशिष्ट ordinal स्थिति पर किसी तालिका में कॉलम जोड़ना संभव है?विशिष्ट ordinal स्थिति

उदाहरण के लिए, हमारी टेबल हमेशा बनाई गई है, बनाई गई, LastModifiedOn, LastModified प्रत्येक तालिका परिभाषा के "अंत" पर कॉलम? मैं इन कॉलम के ऊपर एसएसएमएस में नया कॉलम दिखाना चाहता हूं।

यदि मैं अपने सभी डेटाबेस परिवर्तनों को स्क्रिप्ट कर रहा हूं, तो क्या इस आदेश को तालिका के अंत में संरक्षित करने का कोई तरीका है?

एफवाईआई, अगर मैं इसे भी किया जाना चाहिए तो मैं एक लौ युद्ध स्थापित करने की कोशिश नहीं कर रहा हूं। आप एक धागा है कि उस में जल्दी घिनौना बारे में पढ़ना चाहते हैं, तो यहाँ एक अच्छा एक है:

http://www.developersdex.com/sql/message.asp?p=581&r=5014513

+0

या यही कारण है कि मुझे हर तालिका के शीर्ष पर विचार बनाना चाहिए? –

+0

संबंधित: http://stackoverflow.com/q/1605144/12484 –

उत्तर

23

तुम एक अस्थायी तालिका कि मूल तालिका स्कीमा दर्पण लेकिन स्तंभ क्रम कि आप चाहते हैं के साथ बनाने के लिए, फिर मूल की सामग्री को अस्थायी रूप से कॉपी करें। मूल हटाएं और अस्थायी नाम बदलें।

एसक्यूएल प्रबंधन स्टूडियो दृश्यों के पीछे क्या करता है।

स्कीमा सिंक टूल के साथ, आप इन स्क्रिप्ट को स्वचालित रूप से जेनरेट कर सकते हैं।

+0

Temp तालिकाओं का नाम बदलकर 'tempdb' के बाहर नहीं किया जा सकता है। –

3

SQL सर्वर प्रबंधन स्टूडियो में जाएं, और एक मौजूदा तालिका "डिज़ाइन" करें। बीच में एक कॉलम डालें और जिस स्क्रिप्ट को बनाता है उसे देखें। यह मूल रूप से उचित कॉलम ऑर्डर के साथ एक temp तालिका बना देगा, मूल तालिका से डेटा डालें, मूल तालिका ड्रॉप करें, और temp तालिका का नाम बदलें। यह शायद आपको क्या करना होगा।

3

मेरे ज्ञान के लिए कॉलम के क्रम को बदलने के लिए कोई ज्ञात विधि नहीं है। दृश्यों के पीछे एसक्यूएल प्रबंधन स्टूडियो जो जोस बेसिलियो ने कहा था। और यदि आपके पास एक बड़ी मेज है तो इस तरह कॉलम ऑर्डर बदलने के लिए अव्यवहारिक है।

आप "व्यू" का उपयोग कर सकते हैं। एसक्यूएल विचारों के साथ आप टेबल कॉलम परिवर्तनों से प्रभावित किए बिना किसी भी ऑर्डर का उपयोग कर सकते हैं।

0

आप तालिका संरचना में एक विशिष्ट ordinal स्थान पर एक कॉलम नहीं बना सकते हैं - प्लस, आप क्यों चाहते हैं ?? SQL सर्वर में कॉलम का क्रम पूरी तरह से अप्रासंगिक है।

एसक्यूएल सर्वर प्रबंधन स्टूडियो में एक डिज़ाइन व्यू है जो आपको कॉलम की सूची में किसी भी स्थान पर कॉलम बनाने की अनुमति देता है - लेकिन पृष्ठभूमि में वास्तव में क्या होता है यह है कि नए कॉलम के साथ नई तालिका बनाई जाती है और बूढ़ा हो जाता है।

किसी विशिष्ट स्थान पर कॉलम बनाने या कॉलम को "पुन: क्रमबद्ध करने के लिए कोई SQL DDL आदेश नहीं हैं। यह वास्तव में जरूरत नहीं है।

मार्क

+4

आप क्यों चाहेंगे? ताकि एसएसएमएस में चीजों को देखना आसान हो। यदि, उदाहरण के लिए, मेरे पास एक सारणी है जिसमें टाइमस्टैम्प का एक सेट होता है जो उत्पाद कारखाने के माध्यम से प्रगति करता है, तो डेटाबेस में अनुक्रम में उन्हें स्वाभाविक रूप से रखने से डेटा को आगे और पीछे कूदने में मदद मिलती है। हां, यह कोड से कोई फर्क नहीं पड़ता है, लेकिन यह चीजों को डीबग करने का प्रयास करते समय संज्ञानात्मक भार को कम करने में मदद करता है। –

+0

@ कोलिन मैके: हाँ, यही विचार है। डीबगिंग के बाद ड्रॉप करना न भूलें। –

7

जवाब है हां, यह तकनीकी रूप से संभव है, लेकिन आप एक सिरदर्द ऐसा करने होंगे और यह एक लंबे समय निष्पादित और स्थापित करने के लिए ले जाएगा।

एक: यहाँ स्क्रिप्ट यह पैदा करने और जब आप क्लिक 'सहेजें' निष्पादित हो रहा है की एक उदाहरण है:/कॉपी/ड्रॉप/नाम बदलें

यह वास्तव में क्या एसक्यूएल सर्वर ग्राफिकल इंटरफेस में कर रहा है बनाएं एक तालिका की शुरुआत में एक नया कॉलम जोड़ने के बाद बटन।

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/ 
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_SomeTable 
    (
    MyNewColumn int NOT NULL, 
    OriginalIntColumn int NULL, 
    OriginalVarcharColumn varchar(100) NULL 
    ) ON [PRIMARY] 
    TEXTIMAGE_ON [PRIMARY] 
GO 
ALTER TABLE dbo.Tmp_SomeTable SET (LOCK_ESCALATION = TABLE) 
GO 
SET IDENTITY_INSERT dbo.Tmp_SomeTable ON 
GO 
IF EXISTS(SELECT * FROM dbo.SomeTable) 
    EXEC('INSERT INTO dbo.Tmp_SomeTable (OriginalIntColumn, OriginalVarcharColumn FROM dbo.SomeTable WITH (HOLDLOCK TABLOCKX)') 
GO 
SET IDENTITY_INSERT dbo.Tmp_SomeTable OFF 
GO 
DROP TABLE dbo.SomeTable 
GO 
EXECUTE sp_rename N'dbo.Tmp_SomeTable', N'SomeTable', 'OBJECT' 
GO 

GO 
COMMIT 

दो: स्तंभ जोड़ें/अपडेट/ड्रॉप स्तंभ/नाम बदलें

इस विधि मूल रूप से किसी भी मौजूदा स्तंभ है कि आप अपने नए स्तंभ का 'सही' में जोड़ना चाहते हैं की एक प्रति बनाने शामिल है, डेटा को नए कॉलम में स्थानांतरित करना, फिर मूल को छोड़ना और नए नामकरण करना। यह आपके पास किसी भी इंडेक्स या बाधाओं के साथ कहर बरकरार रखेगा, क्योंकि आपको उन्हें दोबारा दर्ज करना होगा। यह तकनीकी रूप से संभव है, लेकिन फिर विकास और निष्पादन के मामले में दोनों समय लेने वाला है।

CREATE TABLE MyTest (a int, b int, d int, e int) 

INSERT INTO MyTest (a,b,d,e) VALUES(1,2,4,5) 

SELECT * FROM MyTest -- your current table 

ALTER TABLE MyTest ADD c int -- add a new column 
ALTER TABLE MyTest ADD d_new int -- create copies of the existing columns you want to move 
ALTER TABLE MyTest ADD e_new int 

UPDATE MyTest SET d_new = d, e_new = e -- transfer data to the new columns 

ALTER TABLE MyTest DROP COLUMN d -- remove the originals 
ALTER TABLE MyTest DROP COLUMN e 

EXEC SP_RENAME 'MyTest.d_new', 'd'; -- rename the new columns 
EXEC SP_RENAME 'MyTest.e_new', 'e'; 

SELECT * FROM MyTest 

DROP TABLE MyTest -- clean up the sample 

तीन: यह

यह जोर से आदेश की मेरी भावना नाराज साथ रहते हैं ... लेकिन कभी कभी, यह सिर्फ लायक फेरबदल नहीं है।

0

टीएफएस 2013 स्वचालित रूप से आपके लिए यह करेगा

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

0

गंदे और सरल।
सीएसवी को निर्यात तालिका।
वांछित स्थिति पर नया डेटा डालें।
ड्रॉप टेबल।
वांछित कॉलम विनिर्देशों के साथ नई तालिका बनाएं।
सीएसवी से नई तालिका में कॉलम लोड करें।

संबंधित मुद्दे