एक सर्वर से दूसरे (SSMS के साथ) में (सैकड़ों) तालिकाओं को कॉपी करना


27

मेरे पास कई सौ (वर्तमान में 466, लेकिन कभी-कभी बढ़ते हुए) टेबल हैं जिन्हें मुझे एक सर्वर से दूसरे में कॉपी करना होगा।

मुझे पहले कभी ऐसा नहीं करना पड़ा, इसलिए मुझे बिल्कुल भी यकीन नहीं है कि यह कैसे होगा। सभी तालिकाएँ एक ही प्रारूप में हैं:Cart<Eight character customer number>

यह एक बड़ी परियोजना का हिस्सा है, जिसमें मैं इन सभी Cart<Number>तालिकाओं को एक Cartsतालिका में विलय कर रहा हूं , लेकिन यह पूरी तरह से एक अलग सवाल है।

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


2
ब्याज की संभवतः dba.stackexchange.com/questions/30473/…
बिलिंक

जवाबों:


21

आप SQL सर्वर प्रबंधन स्टूडियो के "निर्यात डेटा" कार्य का उपयोग कर सकते हैं। SSMS में डेटाबेस पर राइट क्लिक करें, कार्य चुनें और फिर "डेटा निर्यात करें"। यह एक इंटरैक्टिव विज़ार्ड लॉन्च करेगा जो एक सर्वर से दूसरे में तालिकाओं को कॉपी करने की अनुमति देगा, हालांकि आपको खुद ही सूचक को फिर से बनाना होगा। विज़ार्ड एक अस्थायी SSIS पैकेज बनाता है (हालाँकि आप इसे सहेजने का विकल्प भी चुन सकते हैं) और अपेक्षाकृत तेज़ है।


4
यदि रुचि हो तो PowerShell के माध्यम से समान निर्यात कार्य भी कर सकते हैं। इस क्रिया को करने के लिए समान स्क्रिप्ट यहाँ मेरे उत्तर में है: dba.stackexchange.com/a/122149/507
शॉन मेल्टन

आयात / निर्यात सूचकांकों और निर्भरताओं की नकल क्यों नहीं करता है? 466 टेबल के लिए सूचकांकों को फिर से बनाना बहुत मुश्किल नहीं होगा?
विनी

@ वीनी आप जेनरेट स्क्रिप्स विज़ार्ड का भी उपयोग कर सकते हैं, जो आपको अनुक्रमणिका की प्रतिलिपि बनाने की अनुमति देता है (मुझे नहीं पता कि क्या यह विश्वसनीय रूप से उचित निर्भरता क्रम में एक स्क्रिप्ट उत्पन्न करता है, हालांकि - मैंने हमेशा RedGate SQL का उपयोग उस के लिए तुलना करें) किया है।
हारून बर्ट्रेंड

@AaronBertrand: ठीक है। मेरा भी यही सवाल था। लेकिन जब मैंने आयातित डाइमटाइम को भी smalldatetime में बदल दिया था
विनी

23

यहां एक त्वरित और गंदा तरीका है जो केवल एक लिंक किए गए सर्वर की आवश्यकता है, प्रत्येक दिशा में, पर्याप्त विशेषाधिकार, टक्कर संगतता और डेटा एक्सेस सक्षम है। आप गंतव्य लिंक्ड गंतव्य पर निष्पादित गतिशील SQL उत्पन्न करने के लिए स्रोत लिंक किए गए सर्वर पर इसे चलाते हैं।

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'SELECT * INTO [database].dbo.' + QUOTENAME(name)
  + N' FROM [source_linked_server].[database].dbo.' + QUOTENAME(name) + N';'
FROM sys.tables
WHERE name LIKE N'Cart[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]';

PRINT @sql; -- this will only print 8K, enough to spot check
--EXEC [destination_linked_server].master.sys.sp_executesql @sql;

19

यदि आप ऐसा कुछ चाहते हैं, जिसे आसानी से फिर से पढ़ने योग्य बनाया जा सके, जैसा कि आप इस का परीक्षण करते हैं और मामूली बदलाव करते हैं, तो मेरे उत्तर को यहां देखें:

एक डेटाबेस से दूसरी स्क्रिप्ट में डेटा आयात करें

वह उत्तर SQLCLR संग्रहीत कार्यविधि का उपयोग करके वर्णन करता है जो SqlBulkCopy.NET में वर्ग का उपयोग करता है । उस संग्रहीत प्रक्रिया का उपयोग करके एक कर्सर में किया जा सकता है जो तालिकाओं के माध्यम से लूप करता है। यह प्रक्रिया के आसान संपादन के साथ-साथ नई तालिकाओं के लिए लेखांकन, या WHEREकर्सर क्वेरी में एक शर्त के माध्यम से आसानी से एक या एक से अधिक तालिका को बाहर करने की अनुमति देता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.