2012-06-13 15 views
39

मेरे पास दो SQL सर्वर (2005 संस्करण दोनों) हैं।एक SQL सर्वर से दूसरे SQL Server से निर्यात तालिका डेटा

मैं कई तालिकाओं को एक से दूसरे में माइग्रेट करना चाहता हूं।

मैं कोशिश की है:

  • स्रोत सर्वर मैं सही डेटाबेस पर क्लिक किया है पर, Tasks/Generate scripts का चयन किया। समस्या यह है कि Table/View options के तहत Script data विकल्प नहीं है।

  • तब मैंने अपने गंतव्य सर्वर पर टेबल बनाने के लिए SQL फ़ाइलों को उत्पन्न करने के लिए Script Table As/Create script का उपयोग किया। लेकिन मुझे अभी भी सभी डेटा चाहिए।

तब मैं उपयोग करने की कोशिश:

SELECT * 
INTO [destination server].[destination database].[dbo].[destination table] 
FROM [source server].[source database].[dbo].[source table] 

लेकिन मैं त्रुटि मिलती है:

वस्तु उपसर्ग की अधिकतम संख्या की तुलना में अधिक होता है। अधिकतम 2.

क्या कोई मुझे मेरी समस्या के सही समाधान के लिए इंगित कर सकता है?

+1

आप अपने उत्पन्न बयानों में से कुछ को प्रदर्शित कर सकते हैं खुश ? क्या आपने अन्य सर्वर को लिंक किए गए सर्वर के रूप में जोड़ा है? –

+0

लिंक किए गए सर्वर के रूप में नहीं। यह समझ में नहीं आया, क्योंकि दोनों mssql2005 हैं। मैंने अभी कनेक्शन बनाया है। यह सर्वर से जुड़ा होना चाहिए? – no9

+0

"इनटो" कथन (जो एक टेबल बनाता है और इसमें डालें) केवल स्थानीय टेबल का समर्थन करता है। आपको पहले टेबल बनाना होगा और फिर "[गंतव्य सर्वर] में डालें। [गंतव्य डेटाबेस]। [Dbo]। [गंतव्य तालिका]"। – jumxozizi

उत्तर

43

इस प्रयास करें:

  1. लक्ष्य सर्वर पर Script Table As/Create Script कदम

  2. से अपनी स्क्रिप्ट का उपयोग कर लक्ष्य सर्वर पर अपनी मेज बनाते हैं, आप तो एक टी एसक्यूएल बयान जारी कर सकते हैं:

    INSERT INTO dbo.YourTableNameHere 
        SELECT * 
        FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere 
    

यह ठीक काम करना चाहिए।

+1

मुझे आपका प्रस्ताव पसंद है। मैंने कोशिश की और मुझे मिल गया। Sys.servers में सर्वर नहीं मिला। सत्यापित करें कि सही सर्वर नाम निर्दिष्ट है ... शायद यह एक समस्या है sinte स्रोत सर्वर का नाम "NAME \ NAME2" प्रारूप में है? लेकिन मुझे लगता है [] इसे ठीक करना चाहिए .... विचार? – no9

+8

@ no9: क्षमा करें - ज़ाहिर है, इसके लिए काम करने के लिए, आपको [अपने दो सर्वरों के बीच एक "लिंक किया गया सर्वर" जोड़ना होगा] (http://msdn.microsoft.com/en-us/library/ms188279.aspx)। –

+1

हाँ। लेकिन कल्पना करें, मुझे लिंक किए गए सर्वर बनाने में समस्या है। उत्पादन सर्वर रिमोट कनेक्शन की अनुमति देने के लिए सेट है, फिर भी मुझे प्रतिरूपण या सीधे usr/pwd का उपयोग करते हुए भी एक टाइमआउट मिल रहा है। चूंकि सर्वर मैनेजमेंट मेरे डोमेन में नहीं है, इसलिए मैं इतना कुछ नहीं कर सकता हूं। लेकिन मैं अपनी समस्या को एक अलग तरीके से हल करने में कामयाब रहा। एक मज़ेदार को सिर्फ मस्ती के लिए पोस्ट करें और मुझे समाधान स्वीकार करने के बाद से स्वीकार करें। – no9

2

आप एक स्रोत/गंतव्य सर्वर नहीं चुन सकते हैं।

डेटाबेस एक ही सर्वर पर हैं, तो आप ऐसा कर सकते हैं:

तालिका के कॉलम में बराबर हैं तो आप ऐसा कर सकते हैं (आदेश सहित!):

INSERT INTO [destination database].[dbo].[destination table] 
SELECT * 
FROM [source database].[dbo].[source table] 

यदि आप चाहते हैं एक बार जब आप बैकअप/स्रोत डेटाबेस को पुनर्स्थापित कर सकते हैं तो ऐसा करने के लिए। यदि आपको इसे और अधिक करने की आवश्यकता है तो मैं आपको एक एसएसआईएस प्रोजेक्ट शुरू करने की सलाह देता हूं जहां आप स्रोत डेटाबेस को परिभाषित करते हैं (वहां आप किसी भी सर्वर पर कोई कनेक्शन चुन सकते हैं) और एक प्रोजेक्ट बनाएं जहां आप अपना डेटा वहां ले जाएं। http://msdn.microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx

+1

में पुनर्स्थापित करें हाँ, यदि आप उन्हें लिंक किए गए सर्वर के रूप में जोड़ सकते हैं http://msdn.microsoft.com/en-us/library/ms188279.aspx –

+0

ओह ठीक है, खुद को नहीं पता था। मुझे उस पर प्रकाश डालने के लिए Thx। उपरोक्त मामले में मैं अभी भी इस कार्यों के लिए एक एसएसआईएस परियोजना की सिफारिश करता हूं। – YvesR

+0

एसएसआईएस एक प्रतिलिपि प्रतिलिपि के लिए ओवरलोड का थोड़ा सा है - लेकिन नियमित और वृद्धिशील भार के लिए मैं भी इसका सुझाव दूंगा! –

1

गंतव्य के लिए स्रोत से डेटा कॉपी करने के लिए::

use <DestinationDatabase> 
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable> 
+0

मेरे पास दो अलग-अलग सर्वर हैं। अगर मेरे पास केवल एक ही काम करेगा। – no9

+1

क्या आपने एक लिंक किया हुआ सर्वर बनाया था? आपके प्रश्न से स्पष्ट नहीं है। फिर ऊपर दिए गए प्रश्न में का नाम के सामने जोड़ें ( पर निष्पादित)। –

+0

एक लिंक किए गए सर्वर को नहीं बना सकता है। Marc_s anwser – no9

9

कार्य में स्क्रिप्ट तालिका विकल्प नहीं है/लिपियों उत्पन्न अधिक जानकारी मिलते हैं! मैंने इसे शुरुआत में भी याद किया! लेकिन आप वहां सम्मिलित स्क्रिप्ट उत्पन्न कर सकते हैं (बहुत अच्छी सुविधा, लेकिन बहुत ही सहज ज्ञान युक्त जगह में)।

जब आप "स्क्रिप्टिंग विकल्प सेट करें" चरण "उन्नत" टैब पर जाते हैं।

here वर्णित चरणों (चित्र समझ सकते हैं, लेकिन मैं वहां वहीं में लिखता हूं)।

+0

पर मेरा जवाब देखें धन्यवाद जेनिस। – no9

+0

आपका स्वागत है! :) –

4

SQL सर्वर Import and Export Wizard (कार्य के अंतर्गत -> निर्यात डेटा) का उपयोग करने का प्रयास करें।

यह गंतव्य डेटाबेस में टेबल बनाने की पेशकश करता है। जबकि, जैसा कि आपने देखा है, स्क्रिप्टिंग विज़ार्ड केवल तालिका संरचना बना सकता है।

+0

डेटाबेस पर कोई निर्यात डेटा विकल्प नहीं है जिसे मैं टेबल निर्यात करना चाहता हूं। इसका बस: अलग करें, हटना, बैकअप, पुनर्स्थापित करें, स्क्रिप्ट जेनरेट करें ... – no9

+0

स्क्रिप्टिंग विज़ार्ड डेटा भी निर्यात कर सकता है – user763539

+0

@ user763539 - वास्तव में? पिछली बार मैंने जांच की थी कि स्क्रिप्ट उत्पन्न करने का कोई विकल्प नहीं था जिसमें उदा। 'INSERT 'बयान; निश्चित रूप से [टैग: एसक्यूएल-सर्वर-2005] के लिए सच प्रतीत होता है। क्या आपके पास कोई लिंक या संदर्भ है? –

4

टेबल पहले से ही स्क्रिप्ट का उपयोग कर बनाई गई हैं, तो एक और तरीका है डेटा की प्रतिलिपि करने के लिए है अपने गंतव्य सर्वर

करने के लिए अपने स्रोत सर्वर से सभी डेटा कॉपी करने के लिए टेबल निर्यात करने के लिए BCP आदेश का उपयोग कर रहा है स्रोत सर्वर पर एक पाठ फ़ाइल में डेटा:

bcp <database name>.<schema name>.<table name> OUT C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password> 

लक्ष्य सर्वर पर एक पाठ फ़ाइल से तालिका डेटा आयात करने के लिए:

bcp <database name>.<schema name>.<table name> IN C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password> 
+1

मैंने इसे पहले देखा था, लेकिन चूंकि मैं एक उत्पादन सर्वर से निर्यात कर रहा हूं, इसलिए मैं सुरक्षित नहीं था (अभी भी नहीं) यकीन है कि यह सुरक्षित है :) – no9

+1

आप अपनी तालिका को संशोधित नहीं कर रहे हैं, इसलिए यह बिल्कुल सुरक्षित है लेकिन सही तरीके से इन या आउट कथन का उपयोग करना याद रखें। तालिका से डेटा को तालिका में डेटा प्राप्त करने के लिए तालिका में डेटा प्राप्त करने के लिए और एक टेक्स्ट फ़ाइल (या एक सीएसवी फ़ाइल) – praveen

+0

पर इंगित करने के लिए धन्यवाद। +1 – no9

2

बस किक्स के लिए।

जब से मैं जुड़ा हुआ सर्वर बनाने में सक्षम नहीं था और सिर्फ उत्पादन सर्वर से कनेक्ट INSERT INTO उपयोग करने के लिए पर्याप्त मैं निम्नलिखित नहीं किया था के बाद से:

  • उत्पादन सर्वर डेटाबेस की एक बैकअप बनाया
  • पर डेटाबेस बहाल अपने परीक्षण सर्वर
  • बयान में

यह एक पिछले दरवाजे समाधान डालने मार डाला, लेकिन जब से मैं समस्या नहीं थी यह मेरे लिए काम किया ।

चूंकि मैंने सभी कुंजी और अनुक्रमणिका को स्थानांतरित करने के लिए SCRIPT TABLE AS/CREATE का उपयोग करके खाली तालिकाओं का निर्माण किया है, इसलिए मैं SELECT INTO का उपयोग नहीं कर सका। SELECT INTO केवल तभी काम करता है जब टेबल गंतव्य स्थान पर मौजूद न हों लेकिन यह कुंजी और अनुक्रमणिका की प्रतिलिपि नहीं करता है, इसलिए आपको वह मैन्युअल करना होगा। INSERT INTO कथन का उपयोग करने का नकारात्मक पक्ष यह है कि आपको मैन्युअल रूप से सभी कॉलम नाम प्रदान करना होगा, साथ ही कुछ विदेशी कुंजी बाधाओं में विफल होने पर यह आपको कुछ समस्याएं दे सकता है।

सभी कर्मचारियों के लिए धन्यवाद, कुछ महान समाधान हैं लेकिन मैंने marc_s anwser को स्वीकार करने का निर्णय लिया है।

1

यह कुछ हद तक समाधान के आसपास एक जाना है, लेकिन यह मेरे लिए काम किया मुझे आशा है कि यह रूप में अच्छी तरह से दूसरों के लिए इस समस्या के लिए काम करता है:

आपको लगता है कि आप निर्यात करना चाहते मेज पर चयन SQL क्वेरी चलाने के लिए और बचा सकता है आप ड्राइव में .xls के रूप में परिणाम।

अब वह तालिका बनाएं जिसे आप सभी कॉलम और अनुक्रमणिका के साथ डेटा जोड़ना चाहते हैं। इसे वास्तविक तालिका पर राइट क्लिक और आसानी से स्क्रिप्ट विकल्प चुनने के साथ किया जा सकता है।

अब आप डीबी पर राइट क्लिक कर सकते हैं जहां आप टेबल जोड़ना चाहते हैं और कार्य> आयात का चयन करना चाहते हैं।

आयात निर्यात विज़ार्ड खुलता है और अगला का चयन करें। माइक्रोसॉफ़्ट एक्सेल को इनपुट डेटा स्रोत के रूप में चुनें और फिर ब्राउज़ करें और उस .xls फ़ाइल को चुनें जिसे आपने पहले सहेजा था।

अब गंतव्य सर्वर और गंतव्य तालिका का चयन करें जिसे हमने पहले ही बनाया है।

नोट: यदि कोई पहचान आधारित फ़ील्ड है, तो गंतव्य तालिका में आप पहचान संपत्ति को हटाना चाहेंगे क्योंकि यह डेटा भी डाला जाएगा। तो यदि आपके पास यह पहचान संपत्ति के रूप में केवल एक था तो यह आयात प्रक्रिया में त्रुटि होगी।

अब अगला हिट करें और हिट फिनिश करें और यह आपको दिखाएगा कि कितने रिकॉर्ड आयात किए जा रहे हैं और यदि कोई त्रुटि नहीं होती है तो सफलता लौटाएं।

+0

यहां मेरे लिए महत्वपूर्ण बात –

30

बस अभी तक (एसक्यूएल सर्वर 2008 और इसके बाद के संस्करण के लिए) एक और विकल्प दिखाने के लिए:

  1. राइट क्लिक करें डाटाबेस पर -> 'स्क्रिप्ट निर्मित करें'
  2. का चयन विशिष्ट डेटाबेस वस्तुओं का चयन -> 'कार्य' का चयन आप कॉपी करना चाहते हैं। आइए एक या अधिक टेबल कहें। अगला
  3. उन्नत क्लिक करें और 'स्क्रिप्ट के लिए डेटा के प्रकार' पर नीचे स्क्रॉल करें और 'स्कीमा और डेटा' चुनें। ठीक
  4. चुनें पर क्लिक करें जहां अगले
+2

निर्यात करने के लिए चुनिंदा डेटा चुनने में सक्षम थी, यह विकल्प माइक्रोसॉफ्ट एसक्यूएल प्रबंधन स्टूडियो संस्करण 9 (एसक्यूएल सर्वर 2005 के साथ) में उपलब्ध नहीं है, जिसे ओपी सबसे ज्यादा संदर्भित करता है। – Marcel

3

यह के माध्यम से किया जा सकता है "आयात/निर्यात डाटा ..." एसक्यूएल में सर्वर प्रबंधन स्टूडियो

0

फिर भी एक और विकल्प पर क्लिक करके उत्पन्न स्क्रिप्ट बचाने के लिए और आगे बढ़ने के लिए अगर आप यह उपलब्ध है: सी # .net। विशेष रूप से, Microsoft.SqlServer.Management.Smo नामस्थान।

मैं अपने एसएसआईएस पैकेजों में से एक के स्क्रिप्ट घटक में निम्न के जैसा कोड का उपयोग करता हूं।

var tableToTransfer = "someTable"; 
var transferringTableSchema = "dbo"; 

var srvSource = new Server("sourceServer"); 
var dbSource = srvSource.Databases["sourceDB"]; 

var srvDestination = new Server("destinationServer"); 
var dbDestination = srvDestination.Databases["destinationDB"]; 

var xfr = 
    new Transfer(dbSource) { 
     DestinationServer = srvDestination.Name, 
     DestinationDatabase = dbDestination.Name, 
     CopyAllObjects = false, 
     DestinationLoginSecure = true, 
     DropDestinationObjectsFirst = true, 
     CopyData = true 
    }; 

xfr.Options.ContinueScriptingOnError = false; 
xfr.Options.WithDependencies = false; 

xfr.ObjectList.Add(dbSource.Tables[tableToTransfer,transferringTableSchema]); 
xfr.TransferData(); 

मुझे लगता है कि मुझे स्पष्ट रूप से माइक्रोसॉफ्ट.SqlServer.Smo लाइब्रेरी को संदर्भों में खोजना और जोड़ना था। लेकिन इसके बाहर, यह मेरे लिए काम कर रहा है।

अद्यतन: नामस्थान और पुस्तकालयों को याद रखने से कहीं अधिक जटिल थे।

पुस्तकालयों के लिए

, के संदर्भ जोड़:

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SmoExtended.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer .Management.Sdk.Sfc।dll

नेमस्पेस के लिए, जोड़ें:

  • Microsoft.SqlServer.Management.Common
  • Microsoft.SqlServer.Management.Smo
संबंधित मुद्दे