2009-04-28 6 views
10

मैं SQL सर्वर कॉम्पैक्ट संस्करण डेटाबेस (* .sdf) को डिज़ाइन करने के लिए विजुअल स्टूडियो 2008 का उपयोग कर रहा हूं। मुझे एक नई कॉलम जोड़ने वाली मेरी टेबलों में से एक की स्कीमा बदलनी पड़ी।SQL सर्वर कॉम्पैक्ट संस्करण तालिका स्कीमा में कॉलम ऑर्डर कैसे बदलें?

मैं चाहता हूं कि "नए स्थान पर फ़ील्ड सूची में एक अलग स्थिति में" स्थानांतरित करें "। मैं विजुअल स्टूडियो डिजाइनर में यह कैसे कर सकता हूं?

संपादित करें: मुझे पता है कि एक शुद्ध तकनीकी दृष्टिकोण से कॉलम के आदेश से कोई फर्क नहीं पड़ता। मैं एक आवेदन प्रोटोटाइप कर रहा हूं, इसलिए मुझे स्कीमा को दो बार बदलना है। यदि, उदाहरण के लिए मुझे प्राथमिक कुंजी बदलनी है, तो अंत में सबसे महत्वपूर्ण कॉलम होने पर यह "बदसूरत" होगा। कोड को देखते हुए अन्य डेवलपर्स उलझन में होंगे, मुझे लगता है। यह एस्थेटिक्स का मामला है।

उत्तर

5

आप इसे डिजाइनर में नहीं ले जा सकते हैं। आपको एक नया कॉलम बनाना होगा, पुराना ड्रॉप करना होगा, स्क्रिप्ट जेनरेट करें और स्क्रिप्ट को संपादित करें जहां यह पुरानी तालिका से अस्थायी तालिका में प्रवेश करता है, पुराने कॉलम वैल्यू (चयन में) को नए कॉलम में ले जाता है।

+0

उत्तर के लिए धन्यवाद लागू करें। मैं वीएस में एक टेबल कैसे स्क्रिप्ट कर सकता हूं? मुझे वह विकल्प नहीं मिला। – splattne

+0

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

+0

मुझे अंधे होना चाहिए। मुझे टूलबार नहीं मिल रहा है। क्या आप वाकई SQL सर्वर कॉम्पैक्ट डेटाबेस का उपयोग करते हैं? – splattne

2

मैं पैक्स से सहमत हूं। यदि, किसी विशिष्ट कारण के लिए, आपको अपनी क्वेरी में किसी विशिष्ट क्रम में फ़ील्ड वापस करने की आवश्यकता है, तो उस फ़ील्ड को उस स्थान पर डालने की क्वेरी को बदलें जहां आपको इसकी आवश्यकता है।

, तो जो भी कारण के लिए, आप हर कीमत पर जरूरत है कि क्षेत्र स्थानांतरित करने के लिए, आप निम्नलिखित की तरह एक स्क्रिप्ट है, जो फ़ील्ड 3 एक तालिका में पहले स्तंभ TestTable कहा जाता है बनाता है के साथ यह कर सकते हैं:

/* Original sample table with three fields */ 
CREATE TABLE [dbo].[TestTable](
    [FIELD1] [nchar](10) NULL, 
    [FIELD2] [nchar](10) NULL, 
    [FIELD3] [nchar](10) NULL 
) ON [PRIMARY] 

/* The following script will make FIELD3 the first column */ 
CREATE TABLE dbo.Tmp_TestTable 
    (
    FIELD3 nchar(10) NULL, 
    FIELD1 nchar(10) NULL, 
    FIELD2 nchar(10) NULL 
    ) ON [PRIMARY] 
GO 
IF EXISTS(SELECT * FROM dbo.TestTable) 
    EXEC('INSERT INTO dbo.Tmp_TestTable (FIELD3, FIELD1, FIELD2) 
     SELECT FIELD3, FIELD1, FIELD2 FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)') 
GO 

DROP TABLE dbo.TestTable 
GO 

EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT' 
GO 

हालांकि, मैं जोर देता हूं कि शायद आपकी समस्या को एक अलग दृष्टिकोण के साथ हल किया जा सकता है जिसके लिए पुनर्गठन तालिका की आवश्यकता नहीं है।

+1

यह सिर्फ मेरी गुदा प्रतिधारण है। ;-) मैं एक कॉलम के साथ एक टेबल नहीं देख सकता जो अंत में सबसे महत्वपूर्ण है ... – splattne

+0

ठीक है, मुझे उम्मीद है कि मेरा सुझाव कुछ मदद के लिए हो सकता है।:) – Diego

+1

सुनिश्चित करें कि आप अन्य सभी टेबल आइटमों पर प्रतिलिपि बनाते हैं: इंडेक्स, एफके, चेक बाधाएं, आदि ... –

0

इन चरणों का पालन करें:

  1. सभी विदेशी कुंजी और मूल तालिका के प्राथमिक कुंजी निकालें
  2. मूल तालिका
  3. का नाम बदलें CTAS क्रम में मूल तालिका बनाने आप चाहते हैं
  4. ड्रॉप का उपयोग करना पुरानी मेज
  5. सभी बाधाओं को मूल तालिका
संबंधित मुद्दे