it-swarm.dev

كيف يمكنني أتمتة مهمة "إنشاء برامج نصية" في SQL Server Management Studio 2008؟

أود أتمتة إنشاء البرنامج النصي في SQL Server Management Studio 2008.

ما أفعله الآن هو:

  • انقر بزر الماوس الأيمن على قاعدة البيانات الخاصة بي ، والمهام ، "إنشاء البرامج النصية ..."
  • حدد جميع خيارات التصدير التي أحتاجها يدويًا ، ثم انقر فوق تحديد الكل في علامة التبويب "تحديد كائن"
  • حدد مجلد التصدير
  • في نهاية المطاف ، اضغط على زر "إنهاء"

هل هناك طريقة لأتمتة هذه المهمة؟

تحرير: أريد إنشاء إنشاء نصوص ، وليس تغيير البرامج النصية.

90
Brann

ما ذكره Brann من Visual Studio 2008 SP1 Team Suite هو الإصدار 1.4 من معالج نشر قاعدة البيانات. لقد تم تثبيته مع sql server 2008 (ربما فقط محترف؟) إلى\Program Files\Microsoft SQL Server\90\Tools\Publishing\1.4. استدعاء VS من مستكشف الخادم هو ببساطة استدعاء هذا. يمكنك تحقيق نفس الوظيفة عبر سطر الأوامر مثل:

sqlpubwiz help script

لا أعرف ما إذا كانت v1.4 لها نفس المشكلات التي واجهتها v1.1 (يتم تحويل المستخدمين إلى أدوار ، لا يتم إنشاء قيود بالترتيب الصحيح) ، لكنه ليس حلاً لي لأنه لا يحتوي على كائنات نصية إلى ملفات مختلفة مثل مهام -> إنشاء البرامج النصية في SSMS. أنا أستخدم حاليًا نسخة معدلة من Scriptio (يستخدم MS SMO API) للعمل كبديل محسّن لمعالج نشر قاعدة البيانات (sqlpubwiz.exe). إنه غير قابل للبرمجة حاليًا من سطر الأوامر ، وقد أضيف هذه المساهمة في المستقبل.

تم نشر Scriptio في الأصل على مدونة Bill Graziano ، ولكن تم إصداره لاحقًا إلى CodePlex بواسطة Bill وتم تحديثه بواسطة الآخرين. اقرأ المناقشة لمعرفة كيفية الترجمة للاستخدام مع SQL Server 2008.

http://scriptio.codeplex.com/

تحرير: لقد بدأت منذ ذلك الحين باستخدام منتج RedGate's SQL Compare للقيام بذلك. إنه بديل لطيف جدًا لكل ما يجب أن يكون عليه معالج النشر sql. يمكنك اختيار قاعدة بيانات أو نسخة احتياطية أو لقطة كمصدر ومجلد كموقع إخراج ويقوم بتجميع كل شيء بشكل جيد في بنية مجلد. يحدث أن يكون بنفس التنسيق الذي يستخدمه منتجهم الآخر ، SQL Source Control.

31
noobish

لدى SqlPubwiz خيارات محدودة للغاية مقارنة بتكوين البرنامج النصي في SSMS. على النقيض من ذلك ، فإن الخيارات المتاحة مع SMO تتطابق تمامًا مع تلك الموجودة في SSMS ، مما يشير إلى أنه ربما يكون هو نفس الرمز. (آمل أن MS لم يكتبها مرتين!) هناك العديد من الأمثلة على MSDN مثل هذا الذي يعرض جداول البرمجة النصية ككائنات فردية. ومع ذلك ، إذا كنت تريد أن يقوم كل شيء بالنص بشكل صحيح باستخدام مخطط "كامل" يتضمن كائنات "التكامل المرجعي التعريفي" مثل المفاتيح الخارجية ، فإن جداول البرمجة النصية بشكل فردي لا تعمل التبعيات بشكل صحيح. لقد وجدت أنه من الضروري جمع كل URNs وتسليمها إلى النص البرمجي كصفيف. هذا الكود ، الذي تم تعديله من المثال ، يعمل لي (على الرغم من أنني أجرؤ على أنه يمكنك تنظيمه والتعليق عليه أكثر قليلاً):

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Sdk.Sfc;
...
// 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();
38
OlduwanSteve

كتبت أداة مساعدة لسطر الأوامر مفتوحة المصدر باسم SchemaZen يقوم بذلك. إنها أسرع بكثير من البرمجة النصية من استوديو الإدارة ، كما أن الإخراج أكثر سهولة في التحكم في الإصدار. وهو يدعم البرمجة على حد سواء المخطط والبيانات.

لإنشاء البرامج النصية تشغيل:

البرنامج النصي schemazen.exe - serverhost المضيف - قاعدة بيانات db --scriptDir c:\somedir

ثم لإعادة إنشاء قاعدة البيانات من تشغيل البرامج النصية:

schemazen.exe إنشاء - الخادم المضيف المحلي - قاعدة بيانات ديسيبل - scriptDir ج:\somedir
13
Seth Reno

يمكنك استخدام SQL Server Management Object (SMO) لأتمتة مهام إدارة SQL Server 2005 بما في ذلك إنشاء البرامج النصية: http: //msdn.Microsoft.com/en-us/library/ms162169.aspx .

12
Joe

لا أرى ملف PowerSell مع 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-1550-1.aspx#bm1168100 )

صفحة المشروع: http://sqlpsx.codeplex.com/

الميزة الرئيسية لهذا النهج هي أنه يجمع بين قابلية تكوين/تخصيص استخدام SMO مباشرة ، مع الراحة وسهولة الصيانة باستخدام أداة بسيطة موجودة مثل معالج نشر قاعدة البيانات.

7
Tao

إذا كنت مطورًا ، فعليك استخدام SMO. فيما يلي رابط لفئة Scripter ، وهي نقطة البداية:

فئة Scripter

7
Ryan Lundy

في الأدوات> الخيارات> المصممون> مصممو الجداول وقواعد البيانات ، هناك خيار لـ "إنشاء برامج نصية للتغيير" تلقائيًا سيولد واحدة لكل تغيير تقوم به في وقت حفظه.

4
John Sheehan

يمكنك القيام بذلك باستخدام رمز T-SQL باستخدام الجداول INFORMATION_SCHEMA.

هناك أيضًا أدوات لجهة خارجية - أحب Apex SQL Script على وجه التحديد للاستخدام الذي تتحدث عنه. أنا تشغيله تماما من سطر الأوامر.

3
Cade Roux

إذا كنت ترغب في حل Microsoft ، يمكنك تجربة: Microsoft SQL Server Database Publishing Wizard 1.1

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

إنشاء عملية دفعية يمكنك تشغيلها في أي وقت تحتاج إلى إعادة إنشاء البرامج النصية.

2
Glennular

أنا أستخدم DB Comparer - إنه مجاني ولا يحتوي على سيناريو DB كامل ويمكن مقارنته مع DB آخر وكذلك إنتاج نص Diff. ممتاز لتطوير الإنتاج تغيير البرامج النصية. http://www.dbcomparer.com/

2
MartinC

هناك أيضًا أداة سطر الأوامر البسيطة هذه التي أبنيها لاحتياجاتي.
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/

يمكنه تصدير ديسيبل كامل ، ويحاول تصدير كائنات مشفرة. يتم تخزين كل شيء في مجلدات وملفات sql منفصلة لمقارنة الملفات بسهولة.

رمز متاح أيضا على جيثب.

1
George Kosmidis

جرب أدوات سطر أوامر SQL Server جديدة لإنشاء برامج نصية T-SQL ومراقبة طرق عرض الإدارة الديناميكية.

عملت لي مثل السحر. إنها أداة تستند إلى الثعبان من Microsoft تعمل من سطر الأوامر. كل شيء يعمل كما هو موضح في صفحة Microsoft (انظر الرابط أدناه). عملت مع خادم SQL 2012.

يمكنك تثبيته مع نقطة:

$ pip تثبيت mssql-scripter

نظرة عامة على معلمة الأوامر كالمعتاد مع h للمساعدة:

mssql-scripter -h

تلميح: إذا قمت بتسجيل الدخول إلى SQL-Server عبر مصادقة Windows ، فما عليك سوى ترك اسم المستخدم وكلمة المرور.

https://cloudblogs.Microsoft.com/sqlserver/2017/05/17/try-new-sql-server-command-line-tools-to-generate-t-sql-scripts -و رصد دينامية لإدارة وجهات النظر/

1
matthhias

أنا أستخدم VS 2012 (لقواعد البيانات على MSSQL Server 2008) مقارنة قاعدة البيانات لديه خيار لحفظه ، المقارنة والخيارات. هذا هو أساسا ما هي الإعدادات الخاصة بك للتسليم. بعد ذلك يمكنك القيام بتحديث أو إنشاء برنامج نصي.

أجد أنه من الصعب جدًا تحميله من الملف لاحقًا (السحب والإفلات من مستكشف Windows) لأنني لا أرى الملف في مستكشف الحلول.

0
zhrist

من Visual Studio 2008 SP1 TeamSuite:

في علامة التبويب Server Explorer/Data Connections ، هناك أداة نشر إلى موفر تقوم بنفس الشيء مثل "معالج نشر قاعدة بيانات Microsoft SQL Server" ، لكنها متوافقة مع MS Sql Server 2008.

0
Brann