आप एक बड़े MS SQL .sql फ़ाइल को कैसे आयात करते हैं?


240

मैं एक .sql फ़ाइल की तुलना में RedGate SQL डेटा का उपयोग करता हूं, इसलिए मैं इसे अपने स्थानीय मशीन पर चला सकता हूं। लेकिन समस्या यह है कि फ़ाइल 300mb से अधिक है, जिसका अर्थ है कि मैं कॉपी और पेस्ट नहीं कर सकता क्योंकि क्लिपबोर्ड इसे संभाल नहीं पाएगा, और जब मैं SQL सर्वर प्रबंधन स्टूडियो में फ़ाइल खोलने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है। फ़ाइल बहुत बड़ी होने के बारे में।

क्या कोई बड़ी .sql फ़ाइल चलाने का कोई तरीका है? फ़ाइल में मूल रूप से दो नई तालिकाओं के लिए डेटा है।

जवाबों:


442

कमांड प्रॉम्प्ट से, स्टार्ट अप sqlcmd:

sqlcmd -S <server> -i C:\<your file here>.sql 

बस <server>अपने एसक्यूएल बॉक्स के स्थान के <your file here>साथ और अपनी स्क्रिप्ट के नाम के साथ बदलें । अगर आप SQL इंस्टेंस का उपयोग कर रहे हैं तो भूल न करें, सिंटैक्स है:

sqlcmd -S <server>\instance.

यहां उन सभी तर्कों की सूची दी गई है जिन्हें आप sqlcmd पास कर सकते हैं:

Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-d use database name] [-l login timeout]     [-t query timeout] 
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-q "cmdline query"]   [-Q "cmdline query" and exit] 
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f  | i:[,o:]] [-Z new password and exit] 
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-? show syntax summary] 

1
मैं जैसे कुछ डालने के लिए है: INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text')। मुझे उद्धरण के साथ त्रुटि है। तो मुझे इस त्रुटि को संभालने के लिए (किस पैरामीटर) का उपयोग करना होगा? धन्यवाद
ऑलेक्ज़ेंडर Fentsyk

1
क्या हम बाहरी ड्राइव पर स्क्रिप्ट रख सकते हैं? ई की तरह: ड्राइव? सी ड्राइव के बजाय?
ऐनी

10
बस इस बात की पुष्टि करते हुए कि मैंने इस कमांड का उपयोग करते हुए सिर्फ 1GB sql फ़ाइल
चलाई है

11
यह मेरे लिए काम करता था, लेकिन मुझे अंत में -o से छुटकारा पाना था
'21:59

2
यह 75G sql फ़ाइल चलाने में विफल रहा।
अलादीन

62

मेरे पास एक ही मुद्दा था और थोड़ी देर के लिए संघर्ष कर रहा था फिर अंत में इसका समाधान मिला जो कि अपने डिफ़ॉल्ट पैकेट आकार को बदलने के लिए -aपैरामीटर सेट करना है sqlcmd:

sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767

4
उदाहरण में -d विकल्प जोड़ने के लिए +1। मैंने अपनी sql फ़ाइल में "USE [DBNAME]" का उपयोग किया। इसने भी काम किया। निश्चित नहीं है कि कौन सा बेहतर या पसंदीदा तरीका है
शाकिर

3
धन्यवाद। मैंने डेटाबेस से कनेक्ट करने के लिए आवश्यक उपयोगकर्ता नाम और पासवर्ड के रूप में निम्न कमांड का उपयोग किया। sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>
हरिजू

1
पैकेट का आकार निर्धारित करके आपने किस समस्या का समाधान किया? Microsoft का कहना है: "एक बड़ा पैकेट आकार प्रदर्शन को बढ़ा सकता है ..." ( डॉक्स .microsoft.com/en-us/sql/tools/sqlcmd-utility )
अविश्वसनीय जन

20

आप इस टूल का उपयोग कर सकते हैं। यह वास्तव में उपयोगी है।

BigSqlRunner


मुझे लगा कि यह उपयोगी है, जब तक कि मैं इसे 400 एमबी एसक्यूएल फ़ाइल (INSERT बयानों से भरा) के साथ नहीं चलाता। 9 घंटे तक चलने के बाद, डेटाबेस में कुछ भी नहीं जोड़ा गया था, लेकिन BigSqlRunner 3 जीबी और 6 जीबी मेमोरी के बीच खपत कर रहा था।
मार्टिज़न

बहुत उपयोगी। आमतौर पर मैं मैन्युअल रूप से फ़ाइल (विभिन्न उपकरणों) को विखंडू में विभाजित करता हूं, फिर मैन्युअल रूप से उन्हें संपादित करता हूं ताकि एसक्यूएल स्टेटमेंट "पूरे" हो, फिर एक बैच स्क्रिप्ट के माध्यम से निष्पादित करें। यह इतना आसान बनाता है। 2.3gb .sql फ़ाइल, आसान।
बैरी

14
  1. व्यवस्थापक विशेषाधिकार के साथ कमांड प्रॉम्प्ट लें

  2. निर्देशिका को परिवर्तित करें जहाँ .sql फ़ाइल संग्रहीत है

  3. निम्न आदेश निष्पादित करें

    sqlcmd -S 'your server name' -U 'user name of server' -P 'password of server' -d 'db name'-i script.sql


7

मैं MSSQL एक्सप्रेस 2014 का उपयोग कर रहा हूं और मेरे लिए किसी भी समाधान ने काम नहीं किया। वे सभी बस SQL ​​दुर्घटनाग्रस्त हो गया। जैसा कि मुझे केवल एक स्क्रिप्ट को बंद करने की आवश्यकता थी, जिसमें बहुत से सरल सम्मिलित कथनों के साथ मैं एक बहुत ही अंतिम उपाय के रूप में थोड़ा सांत्वना ऐप लिखकर इसके चारों ओर मिला:

class Program
{
    static void Main(string[] args)
    {
        RunScript();
    }

    private static void RunScript()
    {
        My_DataEntities db = new My_DataEntities();

        string line;

        System.IO.StreamReader file =
           new System.IO.StreamReader("c:\\ukpostcodesmssql.sql");
        while ((line = file.ReadLine()) != null)
        {
            db.Database.ExecuteSqlCommand(line);
        }

        file.Close();
    }
}


2

मुझे भी ऐसी ही समस्या थी। Sql स्क्रिप्ट के साथ मेरी फ़ाइल 150MB से अधिक आकार की थी (बहुत ही सरल INSERT s के लगभग 900k के साथ )। मैंने ताकुरो द्वारा सुझाए गए समाधान का उपयोग किया (इस प्रश्न के उत्तर के रूप में) लेकिन मुझे अभी भी यह कहते हुए संदेश के साथ त्रुटि हुई कि पर्याप्त मेमोरी नहीं थी ("इस क्वेरी को चलाने के लिए संसाधन पूल 'आंतरिक में अपर्याप्त सिस्टम मेमोरी है")।

क्या मदद मिली कि मैंने हर 50k INSERT के बाद GO कमांड लगाई ।

(यह सीधे सवाल (फ़ाइल आकार) को संबोधित नहीं कर रहा है, लेकिन मेरा मानना ​​है कि यह समस्या को हल करता है जो अप्रत्यक्ष रूप से एसक्यूएल स्क्रिप्ट के बड़े आकार के साथ जुड़ा हुआ है। मेरे मामले में कई कमांड डालते हैं)


1

आपका प्रश्न इस से काफी मिलता-जुलता है

आप अपनी फ़ाइल / स्क्रिप्ट को .txt या .sql के रूप में सहेज सकते हैं और इसे Sql सर्वर प्रबंधन स्टूडियो से चला सकते हैं (मुझे लगता है कि मेनू ओपन / क्वेरी है, फिर बस SSMS इंटरफ़ेस में क्वेरी चलाएँ)। आपको migh को पहली पंक्ति को अपडेट करना होगा, जो डेटाबेस को आपके स्थानीय मशीन पर बनाए जाने या चुने जाने का संकेत देता है।

यदि आपको यह डेटा स्थानांतरण बहुत बार करना है, तो आप प्रतिकृति के लिए जा सकते हैं। आपकी आवश्यकताओं के आधार पर, स्नैपशॉट प्रतिकृति ठीक हो सकती है। यदि आपको अपने दो सर्वरों के बीच डेटा सिंक करना है, तो आप मर्ज प्रतिकृति जैसे अधिक जटिल मॉडल के लिए जा सकते हैं।

संपादित करें: मैंने नोटिस नहीं किया कि आपको फ़ाइल आकार से जुड़े SSMS की समस्या थी। तब आप कमांड-लाइन के लिए जा सकते हैं, जैसा कि दूसरों द्वारा प्रस्तावित किया गया है, स्नैपशॉट प्रतिकृति (अपने मुख्य सर्वर पर प्रकाशित करें, अपने स्थानीय एक पर सदस्यता लें, दोहराएं, फिर सदस्यता समाप्त करें) या यहां तक ​​कि बैकअप / पुनर्स्थापित करें


3
जैक ने उल्लेख किया कि वह SSMS से ऐसा नहीं कर सकता क्योंकि फ़ाइल बहुत बड़ी है।
रे बोयसेन

1

फ़ाइल में मूल रूप से दो नई तालिकाओं के लिए डेटा है।

तब आप इसे केवल DTS (या SSIS, यदि यह SQL Server 2005+ है) से अधिक डेटा प्राप्त कर सकते हैं, यदि दो सर्वर एक ही नेटवर्क पर हैं।

यदि दो सर्वर एक ही नेटवर्क पर नहीं हैं, तो आप स्रोत डेटाबेस का बैकअप ले सकते हैं और इसे गंतव्य सर्वर पर एक नए डेटाबेस में पुनर्स्थापित कर सकते हैं। फिर आप INSERT INTO SELECTदो तालिकाओं को गंतव्य डेटाबेस में स्थानांतरित करने के लिए डीटीएस / एसएसआईएस, या एक साधारण का भी उपयोग कर सकते हैं ।


यदि एक या दो तालिकाओं में एक फ़ाइल उत्पन्न होती है जो बड़ी होती है, तो यह मान लेना सुरक्षित होता है कि डीबी गिग्स का एक जोड़ा है, जो बैकअप बनाता है और कई मामलों में संक्रामक को बहाल करता है।
कप्तान केनपाची

1

आशा है कि यह आपकी मदद करेगा!

sqlcmd -u UserName -s <ServerName\InstanceName> -i U:\<Path>\script.sql

1
-U <उपयोगकर्ता नाम> -P <पासवर्ड> विकल्प कमांड ऊपरी मामला होना चाहिए कम मामला नहीं है
eric xu

0

मैंने एक ही समस्या का सामना किया है और इसका पता लगाने के लिए एक पूरे दिन का निवेश किया है लेकिन इसे .sql फ़ाइल की प्रतिलिपि बनाकर और .txt फ़ाइल में एक्सटेंशन को बदलकर और .txt फ़ाइल को क्रोम ब्राउज़र में खोलें। मैंने देखा है कि जादू और फ़ाइल एक ब्राउज़र में खोली गई है।

धन्यवाद एवं शुभकामनाएँ,

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