Question

Je voudrais automatiser la génération de script dans SQL Server Management Studio 2008.

En ce moment, ce que je fais est:

  • Faites un clic droit sur ma base de données, les tâches, "Générer des scripts ..."
  • sélectionner manuellement toutes les options d'exportation dont j'ai besoin, et appuyez sur tout sélectionner dans l'onglet « objet select »
  • Sélectionnez le dossier d'exportation
  • Finalement, cliquez sur le bouton "Terminer"

Y at-il un moyen d'automatiser cette tâche?

Modifier. Je veux générer création scripts, ne change pas les scripts

Était-ce utile?

La solution

Qu'est-ce que Brann est de la mentionner Visual Studio 2008 SP1 Team Suite est la version 1.4 de la base de données Assistant de publication. Il est installé avec le serveur SQL 2008 (peut-être que professionnel?) Dans \ Program Files \ Microsoft SQL Server \ 90 \ Tools \ Publishing \ 1.4. L'appel VS de l'explorateur de serveur appelle simplement cela. Vous pouvez obtenir les mêmes fonctionnalités via la ligne de commande comme:

sqlpubwiz help script

Je ne sais pas si v1.4 a les mêmes problèmes que V1.1-ce que (les utilisateurs sont convertis en rôles, les contraintes ne sont pas créés dans l'ordre), mais ce n'est pas une solution pour moi parce qu'il n » objets script t à différents fichiers comme le Tasks-> option Générer des scripts dans SSMS ne. J'utilise actuellement une version modifiée de scriptio (utilise l'API MS SMO) pour agir comme un remplacement amélioré pour l'assistant d'édition de base de données (sqlpubwiz.exe). Il est pas scriptable de la ligne de commande, je pourrais ajouter que la contribution à l'avenir.

scriptio a été posté sur le blog de Bill Graziano, mais a par la suite été libéré à CodePlex par Bill et mis à jour par d'autres. Lire la discussion pour voir comment compiler pour une utilisation avec SQL Server 2008.

http://scriptio.codeplex.com/

EDIT: Je l'ai depuis commencé à le faire en utilisant le SQL Redgate Comparer produit. Il est un remplacement très agréable pour tout ce que l'assistant d'édition sql aurait dû être. Vous choisissez une base de données, la sauvegarde, ou un instantané comme source, et un dossier comme l'emplacement de sortie et bien dans tout dumps une structure de dossiers. Il se trouve être le même format que leur autre produit, SQL Source Control, utilise.

Autres conseils

SqlPubwiz a des options très limitées par rapport à la génération de script dans SSMS. En revanche, les options disponibles avec SMO correspondent presque exactement ceux SSMS, ce qui suggère qu'il est probablement même le même code. (J'espère que MS n'a pas écrit deux fois!) Il y a plusieurs exemples sur MSDN comme ce un qui montrent des tables de script sous forme d'objets individuels. Toutefois, si vous voulez que tout scénario correctement avec un schéma « complet » qui comprend « DRI » (intégrité référentielle déclarative) des objets comme les clés étrangères puis tables de script ne fonctionne pas individuellement les dépendances correctement. Je l'ai trouvé neccessaire de rassembler tous les URN et les remettre au scripteur comme un tableau. Ce code, modifié par l'exemple, fonctionne pour moi (même si j'ose dire que vous pouvez ranger et il commenter un peu plus):

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();

J'ai écrit une ligne de commande open source utilitaire nommé SchemaZen qui fait cela. Il est beaucoup plus rapide que les scripts du studio de gestion et sa sortie est plus facile le contrôle de version. Il prend en charge les scripts à la fois le schéma et les données.

Pour générer des scripts exécutés:

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

Ensuite, pour recréer la base de données à partir de scripts exécuter:

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

Vous pouvez utiliser les tâches de gestion SQL Server Object Management (SMO) pour automatiser SQL Server 2005, y compris la génération de scripts: href="http://msdn.microsoft.com/en-us/library/ms162169.aspx" rel="noreferrer"> http://msdn.microsoft.com/ fr-fr / bibliothèque / ms162169.aspx .

Si vous êtes un développeur, allez certainement avec SMO. Voici un lien vers la classe Scripter, qui est votre point de départ:

Scripter classe

Je ne vois pas avec Powershell SQLPSX mentionné dans l'une de ces réponses ... J'ai personnellement pas joué avec lui, mais il semble très bien simple à utiliser et parfaitement adapté à ce type de tâches d'automatisation, avec des tâches telles que:

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

(ref: http://www.sqlservercentral.com/Forums /Topic1167710-1550-1.aspx#bm1168100)

Page du projet: http://sqlpsx.codeplex.com/

Le principal avantage de cette approche est qu'elle combine la configurablity / customizability d'utiliser SMO directement, avec la commodité et la maintenabilité d'utiliser un outil simple existant comme la base de données Assistant de publication.

Dans Outils> Options> Concepteurs> Table et base de données il y a une option pour concepteurs « Générer automatiquement des scripts de modification » qui va générer un pour chaque changement faites au moment où vous enregistrez.

Vous pouvez le faire avec le code T-SQL en utilisant les tables INFORMATION_SCHEMA.

Il y a aussi des outils tiers - J'aime Apex SQL Script précisément pour l'utilisation que vous parlez. Je lance complètement de la ligne de commande.

Essayez nouveaux outils de ligne de commande SQL Server pour générer des scripts T-SQL et le suivi Vues de gestion dynamique.

A travaillé pour moi comme un charme. Il est un nouvel outil de python de Microsoft qui va de la ligne de commande. Tout fonctionne comme décrit sur la page Microsoft (voir le lien ci-dessous) A travaillé pour moi avec le serveur SQL 2012.

Vous installez avec pip:

  

$ pip installer MSSQL-scripteur

Vue d'ensemble des paramètres de commande comme d'habitude avec h pour l'aide:

  

MSSQL-scripteur -h

Astuce: Si vous vous connectez à SQL serveur via l'authentification Windows, laissez quelques pas Nom d'utilisateur et mot de passe.

Je me sers de DB Comparer - est gratuit et aucun script DB et toute agitation peut se comparer à un autre DB et aussi de produire un script Diff. Excellent pour le développement de scripts de changement de production. http://www.dbcomparer.com/

Il y a aussi ce simple outil de ligne de commande je construis pour mes besoins.
http: //mycodepad.wordpress. com / 2013/11/18 / export-ms-base de données SQL-schéma-à-c /

Il peut exporter un db entier, et il essaie d'exporter des objets cryptés. Tout est stocké dans des dossiers et des fichiers sql séparés pour la comparaison facile des fichiers.

Le code est également disponible sur GitHub.

A partir de Visual Studio 2008 SP1 TeamSuite:

Dans l'Explorateur de serveur / données onglet Connexions, il y a un publier à l'outil de fournisseur qui fait la même chose que « Microsoft SQL Server Database Assistant de publication », mais qui est compatible avec MS Sql Server 2008.

J'utilise VS 2012 (pour BDs sur MSSQL Server 2008) comparer la base de données a une option pour l'enregistrer, la comparaison et les options. C'est essentiellement ce sont vos paramètres pour la livraison. Après cela, vous pouvez faire la mise à jour ou générer le script.

Je trouve juste un petit peu difficile à charger de fichier plus tard (glisser-déposer depuis l'explorateur Windows) que je ne vois pas le fichier dans l'explorateur de solution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top