मैं SQL Server प्रबंधन स्टूडियो 2008 में "उत्पन्न स्क्रिप्ट" कार्य को स्वचालित कैसे कर सकता हूं?


98

मैं SQL सर्वर प्रबंधन स्टूडियो 2008 में स्क्रिप्ट पीढ़ी को स्वचालित करना चाहता हूं।

अभी मैं क्या कर रहा हूँ:

  • मेरे डेटाबेस, कार्य, "लिपियां उत्पन्न करें ..." पर राइट क्लिक करें
  • मैन्युअल रूप से सभी निर्यात विकल्पों का चयन करें जिनकी मुझे आवश्यकता है, और "चयन वस्तु" टैब पर सभी का चयन करें
  • निर्यात फ़ोल्डर का चयन करें
  • आखिरकार "समाप्त करें" बटन दबाएं

क्या इस कार्य को स्वचालित करने का कोई तरीका है?

संपादित करें: मैं सृजन स्क्रिप्ट बनाना चाहता हूं , स्क्रिप्ट बदलना नहीं।


क्या आपको इसका जवाब मिला? मैं यह भी करना चाहता हूं, मैंने प्रकाशन का उपयोग किया, यह मुश्किल से बचा, पता नहीं कहां और क्या मेरे पास सभी विकल्प नहीं हैं जो स्क्रिप्ट बनाते समय हैं: -?
एलेक्सा एड्रियन

1
जैसा कि कई उत्तरों में उल्लेख किया गया है, यदि आप एक डेवलपर हैं तो SMO का उपयोग करें
Jay Jay Jay

जवाबों:


31

ब्रान्न विजुअल स्टूडियो 2008 SP1 टीम सूट से जो उल्लेख कर रहा है वह डेटाबेस प्रकाशन विज़ार्ड के संस्करण 1.4 है। यह sql सर्वर 2008 (शायद केवल पेशेवर?) To \ Program Files \ Microsoft SQL Server \ 90 \ Tools \ Publishing \ 1.4 के साथ स्थापित है। सर्वर एक्सप्लोरर से वीएस कॉल बस इसे बुला रहा है। आप कमांड लाइन के माध्यम से समान कार्यक्षमता प्राप्त कर सकते हैं जैसे:

sqlpubwiz help script

मुझे नहीं पता कि v1.4 में वही परेशानी है जो v1.1 ने की (उपयोगकर्ताओं को भूमिकाओं में परिवर्तित किया गया है, बाधाओं को सही क्रम में नहीं बनाया गया है), लेकिन यह मेरे लिए कोई समाधान नहीं है क्योंकि यह स्क्रिप्ट ऑब्जेक्ट नहीं करता है अलग-अलग फाइलों जैसे टास्क-> एसएसएमएस में स्क्रिप्‍ट जनरेट का ऑप्‍शन करता है। मैं वर्तमान में स्क्रिप्टिंग विज़ार्ड (sqlpubwiz.exe) के लिए एक बेहतर प्रतिस्थापन के रूप में कार्य करने के लिए Scriptio के एक संशोधित संस्करण (MS SMO API का उपयोग करता हूं) का उपयोग कर रहा हूं। यह वर्तमान में कमांड लाइन से स्क्रिप्ट करने योग्य नहीं है, मैं भविष्य में उस योगदान को जोड़ सकता हूं।

Scriptio मूल रूप से बिल ग्रैजियानो के ब्लॉग पर पोस्ट किया गया था, लेकिन बाद में बिल द्वारा कोडप्लेक्स को जारी किया गया और दूसरों द्वारा अपडेट किया गया। SQL Server 2008 के साथ उपयोग के लिए संकलन करने के तरीके को देखने के लिए चर्चा पढ़ें।

http://scriptio.codeplex.com/

संपादित करें: मैंने ऐसा करने के लिए RedGate's SQL उत्पाद की तुलना करना शुरू कर दिया है। यह सभी के लिए एक बहुत अच्छा प्रतिस्थापन है जो sql प्रकाशन विज़ार्ड को होना चाहिए था। आप स्रोत के रूप में एक डेटाबेस, बैकअप या स्नैपशॉट चुनते हैं, और आउटपुट स्थान के रूप में एक फ़ोल्डर और यह सब कुछ एक फ़ोल्डर संरचना में अच्छी तरह से डंप करता है। यह वही प्रारूप होता है जो उनके अन्य उत्पाद, SQL स्रोत नियंत्रण, उपयोग करता है।


2012 में एक बराबर है? मुझे खुशी होगी कि अगर जादूगर को "स्क्रिप्ट इंडेक्स" जैसी मेरी सेटिंग याद हो।
पीटरएक्स

6
@PeterX एसएमएस> टूल्स> विकल्प> SQL सर्वर ऑब्जेक्ट एक्सप्लोरर> स्क्रिप्टिंग
zanlok

1
2012 के लिए इस गाइड का पालन करें: simple-talk.com/sql/database-administration/…
साइमन हचिसन

@zanlok बहुत उपयोगी टिप्पणी। दुर्भाग्य से वे SQL Server 2014 में "असमर्थित बयान शामिल करें" विकल्प याद कर रहे हैं।
jk7

42

एसएसएमएस में स्क्रिप्ट निर्माण की तुलना में SqlPubwiz के पास बहुत सीमित विकल्प हैं। एसएमओ के साथ उपलब्ध विकल्पों के विपरीत, एसएसएमएस में लगभग उन लोगों से मेल खाते हैं, जो यह सुझाव देते हैं कि यह संभवतः समान कोड है। (मुझे उम्मीद है कि MS ने इसे दो बार नहीं लिखा होगा!) MSDN पर इस तरह के कई उदाहरण हैं जो अलग-अलग वस्तुओं के रूप में स्क्रिप्टिंग टेबल दिखाते हैं। हालाँकि यदि आप 'डीआरआई' (डिक्लेरेटिव रेफ़रमेंटल इंटीग्रिटी) वस्तुओं को विदेशी कुंजियों की तरह शामिल करना चाहते हैं, तो 'फुल' स्कीमा के साथ सब कुछ सही ढंग से स्क्रिप्ट करना चाहते हैं, तो व्यक्तिगत रूप से टेबल की स्क्रिप्टिंग निर्भरता को सही ढंग से काम नहीं करती है। मैंने पाया कि यह सभी URNs को इकट्ठा करने और एक सरणी के रूप में ट्रॉटर को सौंपने के लिए उपयोगी है। इस कोड, उदाहरण से संशोधित,

    using Microsoft.SqlServer.Management.Smo;
    using Microsoft.SqlServer.Management.Sdk.Sfc;
    // etc...

    // Connect to the local, default instance of SQL Server. 
    Server srv = new Server();

    // Reference the database.  
    Database db = srv.Databases["YOURDBHERE"];

    Scripter scrp = new Scripter(srv);
    scrp.Options.ScriptDrops = false;
    scrp.Options.WithDependencies = true;
    scrp.Options.Indexes = true;   // To include indexes
    scrp.Options.DriAllConstraints = true;   // to include referential constraints in the script
    scrp.Options.Triggers = true;
    scrp.Options.FullTextIndexes = true;
    scrp.Options.NoCollation = false;
    scrp.Options.Bindings = true;
    scrp.Options.IncludeIfNotExists = false;
    scrp.Options.ScriptBatchTerminator = true;
    scrp.Options.ExtendedProperties = true;

    scrp.PrefetchObjects = true; // some sources suggest this may speed things up

    var urns = new List<Urn>();

    // Iterate through the tables in database and script each one   
    foreach (Table tb in db.Tables)
    {
        // check if the table is not a system table
        if (tb.IsSystemObject == false)
        {
            urns.Add(tb.Urn);
        }
    }

    // Iterate through the views in database and script each one. Display the script.   
    foreach (View view in db.Views)
    {
        // check if the view is not a system object
        if (view.IsSystemObject == false)
        {
            urns.Add(view.Urn);
        }
    }

    // Iterate through the stored procedures in database and script each one. Display the script.   
    foreach (StoredProcedure sp in db.StoredProcedures)
    {
        // check if the procedure is not a system object
        if (sp.IsSystemObject == false)
        {
            urns.Add(sp.Urn);
        }
    }

    StringBuilder builder = new StringBuilder();
    System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray());
    foreach (string st in sc)
    {
        // It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS.
        // Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script.
        builder.AppendLine(st);
        builder.AppendLine("GO");
    }

    return builder.ToString();

9
आप Microsoft.SqlServer.Management.SqlScriptPublish.ScriptPublishWizardअसेंबली C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ Tools \ Binn \ ManagementStudio \ Microsoft.SqlServer.Management.SqlScriptPublishUI.dll से कक्षा को देख सकते हैं । यह SSMS का उपयोग करता है। (वैकल्पिक रूप से, आप Microsoft.SqlServer.Management.UI.GenerateScriptअसेंबली C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ Tools \ Binn \ ManagementStudio \ ReplicationDialog.dll से
कक्षा को देख सकते हैं

उदाहरण कोड और लिंक यहां एक शानदार शुरुआत थी, और ओपी के लिए सबसे पूर्ण उत्तर होना चाहिए (जो कि मेरा सटीक सवाल भी था)।
15:01 बजे zanlok

1
मैंने एक सी # ऐप को एक साथ हैक किया जो आपको लिनक्स में कमांड लाइन से SQL सर्वर स्क्रिप्ट उत्पन्न करने की अनुमति देता है। आप सभी की जरूरत है। नेट कोर 2 पूर्वावलोकन: github.com/mkurz/SQLServerScripter
mkurz

20

मैंने स्कीमाज़ेन नामक एक ओपन सोर्स कमांड लाइन उपयोगिता लिखी है जो ऐसा करती है। यह प्रबंधन स्टूडियो से स्क्रिप्टिंग की तुलना में बहुत तेज़ है और यह आउटपुट अधिक संस्करण नियंत्रण के अनुकूल है। यह स्कीमा और डेटा दोनों की स्क्रिप्टिंग का समर्थन करता है।

स्क्रिप्ट चलाने के लिए:

schemazen.exe स्क्रिप्ट - ओवरस्वर लोकलहोस्ट --database db --scriptDir c: \ somedir

फिर स्क्रिप्ट रन से डेटाबेस को फिर से बनाने के लिए:

schemazen.exe create --server localhost --database db --scriptDir c: \ somedir

मैंने केवल स्कीमाज़ेन की कोशिश की है और मैं वास्तव में प्रभावित हूं। पहली बार काम किया। धन्यवाद सेठ!
साइमन ह्यूजेस

@ सेठ आप वस्तुओं का उपयोग करने के लिए क्या कर रहे हैं? मैं किसी भी Microsoft.SqlServer कुछ भी करने के लिए एक भी संदर्भ नहीं देखा था (अच्छी तरह से वहाँ एक अप्रयुक्त उपयोग कथन था)।
जॉन

@ जॉन - स्कीमा ज़ेन में स्क्रिप्टिंग के लिए खुद की लाइब्रेरी है। यह स्कीमा को एक मॉडल में पढ़ता है और फिर मॉडल के आधार पर स्क्रिप्ट बनाता है। एक साधारण उदाहरण के लिए github.com/sethreno/schemazen/blob/master/model/Models/… देखें ।
सेठ रेनो

12

स्क्रिप्ट बनाने सहित SQL सर्वर 2005 प्रबंधन कार्यों को स्वचालित करने के लिए आप SQL सर्वर प्रबंधन ऑब्जेक्ट (SMO) का उपयोग कर सकते हैं: http://msdn.microsoft.com/en-us/library/ms162169.aspx



7

मैं इनमें से किसी भी उत्तर में उल्लिखित SQLPSX के साथ शक्तियां नहीं देखता ... मैंने व्यक्तिगत रूप से इसके साथ नहीं खेला है, लेकिन यह इस तरह के स्वचालन कार्यों के लिए उपयोग करने के लिए और आदर्श रूप से अनुकूल है, जैसे कार्यों के साथ:

Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter

(रेफरी: http://www.sqlservercentral.com/Forums/Topic1167710-155050-1.aspx#bm1168100 )

परियोजना पृष्ठ: http://sqlpsx.codeplex.com/

इस दृष्टिकोण का मुख्य लाभ यह है कि यह डेटाबेस प्रकाशन विज़ार्ड जैसे सरल मौजूदा उपकरण का उपयोग करने की सुविधा और रखरखाव के साथ सीधे एसएमओ का उपयोग करने के विन्यास / अनुकूलन को जोड़ती है।


1
मैंने इस समाधान को आज़माने में कुछ समय बिताया, लेकिन अंत में मैंने C # और SMO का उपयोग किया। समस्या मुझे आसानी से अतीत में नहीं मिल सकती है उदाहरण के कोड प्रत्येक तालिका को व्यक्तिगत रूप से स्क्रिप्ट करते हैं। एक बार जब आप 'DRI' (Declarative Referential Integrity) ऑब्जेक्ट को विदेशी कुंजियों में जोड़ना शुरू करते हैं तो यह निर्भरताएँ सही नहीं होंगी और / या यह बहुत धीमी हो जाएगी।
ओल्डवान्वेटेव जुले

4

टूल्स> ऑप्शन्स> डिज़ाइनर्स> टेबल और डेटाबेस डिज़ाइनर्स में 'ऑटो जेनरेट चेंज स्क्रिप्ट्स' के लिए एक ऑप्शन होता है जो आपके द्वारा सेव किए जाने वाले समय में आपके द्वारा किए गए हर बदलाव के लिए एक उत्पन्न करेगा।


3
यह वही नहीं है जो मुझे चाहिए। मैं निर्माण स्क्रिप्ट प्राप्त करना चाहता हूं (मेरा अंतिम लक्ष्य उन फ़ाइलों को अपने स्रोत नियंत्रण प्रणाली में स्वचालित रूप से जांचना है)
Brann

3

आप INFORMATION_SCHEMA तालिकाओं का उपयोग करके इसे T-SQL कोड के साथ कर सकते हैं।

तीसरे पक्ष के उपकरण भी हैं - मैं एपेक्स एसक्यूएल स्क्रिप्ट पसंद करता हूं जिसके बारे में आप बात कर रहे हैं। मैं इसे पूरी तरह से कमांड-लाइन से चलाता हूं।


3

T-SQL स्क्रिप्ट उत्पन्न करने के लिए नए SQL सर्वर कमांड लाइन टूल का प्रयास करें और डायनेमिक प्रबंधन दृश्य की निगरानी ।

मेरे लिए आकर्षण की तरह काम किया। यह Microsoft का एक नया पायथन आधारित टूल है जो कमांड लाइन से चलता है। Microsoft पेज पर वर्णित सब कुछ काम करता है (नीचे लिंक देखें) मेरे लिए SQL 2012 सर्वर के साथ काम किया।

आप इसे पाइप से स्थापित करें:

$ पाइप स्थापित करें mssql-trickter

मदद के लिए एच के साथ हमेशा की तरह कमांड पैरामीटर अवलोकन:

mssql -टर-एच

संकेत: यदि आप Windows प्रमाणीकरण के माध्यम से SQL-Server पर लॉग इन करते हैं, तो बस उपयोगकर्ता नाम और पासवर्ड छोड़ दें।

https://cloudblogs.microsoft.com/sqlserver/2017/05/17/try-new-sql-server-command-line-tools-to-generate-t-sql-scripts-and-monitor-dynamic-management- विचारों /


2

यदि आप Microsoft समाधान के लिए प्रयास कर सकते हैं: Microsoft SQL Server डेटाबेस प्रकाशन विज़ार्ड 1.1

http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

यह एक बैच प्रक्रिया बनाता है जिसे आप कभी भी स्क्रिप्ट के पुनर्निर्माण के लिए चला सकते हैं।


1
दुर्भाग्य से, यह समर्थन नहीं करता SqlServer 2008
Brann

1
संस्करण 1.2 कहता है कि यह 2000 और 2005 का समर्थन करता है, लेकिन मैंने इसका इस्तेमाल 2008 में 3800+ टेबल के साथ एक डेटाबेस को स्क्रिप्ट करने के लिए किया था और इसने ठीक काम किया। इसमें कंप्रेस विकल्प शामिल नहीं थे, जिन्हें 2008 तक पेश नहीं किया गया था। मैंने अभी-अभी 2008 R2 डेटाबेस के खिलाफ परीक्षण किया है और यह स्क्रिप्ट को ठीक भी करता है।
जेरेमी

2

मैं DB तुलना का उपयोग कर रहा हूँ - इसका मुफ़्त और कोई उपद्रव लिपि पूरे DB नहीं है और दूसरे DB से तुलना कर सकते हैं और एक डिफ स्क्रिप्ट का निर्माण भी कर सकते हैं। विकास के लिए उत्कृष्ट स्क्रिप्ट बदलने के लिए। http://www.dbcomparer.com/


1

इस सरल कमांड लाइन उपकरण भी है जो मैं अपनी आवश्यकताओं के लिए बनाता हूं।
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/

यह एक संपूर्ण db निर्यात कर सकता है, और यह एन्क्रिप्टेड वस्तुओं को निर्यात करने की कोशिश करता है। सब कुछ फ़ोल्डरों में संग्रहीत किया जाता है और आसान फ़ाइल तुलना के लिए अलग-अलग एसक्यूएल फाइलें।

कोड भी जीथब पर उपलब्ध है।


0

विजुअल स्टूडियो 2008 SP1 टीमसुइट से:

सर्वर एक्सप्लोरर / डेटा कनेक्शन टैब में, प्रदाता टूल के लिए एक प्रकाशन है जो "Microsoft SQL सर्वर डेटाबेस प्रकाशन विज़ार्ड" के समान है, लेकिन जो MS Sql सर्वर 2008 के साथ संगत है।


यह कार्य को स्वचालित करने में कैसे मदद करता है?
सर्ज वेटियर

0

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

मुझे अभी यह थोड़ा अजीब लगता है कि इसे बाद में फ़ाइल से लोड करना (विंडोज़ एक्सप्लोरर से ड्रैग एंड ड्रॉप) क्योंकि मैं फाइल को सोल्यूशन एक्सप्लोरर में नहीं देखता।

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