94 votes

SQL Server - copier des procédures stockées d'une BD à une autre

Je suis novice en SQL et j'avais besoin de combiner deux bases de données .mdf en une seule. J'ai fait cela en utilisant SQL Server 2008 Manager - Tasks > Import/Export tables.les tables et les vues ont été copiées avec succès, mais il n'y a pas de procédures stockées dans la nouvelle base de données. Existe-t-il un moyen de faire cela ?

1 votes

Si vous voulez les copier de manière programmatique, commencez ici : stackoverflow.com/a/6124487/138938

143voto

Jaimal Chohan Points 4748
  • Cliquez à droite sur la base de données
  • Tâches
  • Générer des scripts
  • Sélectionnez les objets que vous souhaitez script.
  • script vers un fichier
  • Exécuter les scripts générés contre la base de données cible.

0 votes

Bonjour, merci pour la réponse rapide. Pouvez-vous m'expliquer comment utiliser script contre la base de données cible. Je suis nouveau dans ce domaine.

1 votes

@BarryKaye Et s'il a 30-40 procédures stockées ? Le clic droit ne serait-il pas un peu lent ?

0 votes

@Oak Ouvrir le fichier generate script dans SQL Management Studio. Changez la Connexion à votre nouvelle base de données. Changez la ligne en haut du fichier où il est écrit 'Use DatabaseName' pour votre base de données et exécutez.

22voto

ShaQue Points 91

Ce code copie toutes les procédures stockées dans la base de données principale vers la base de données cible, vous pouvez copier uniquement les procédures que vous souhaitez en filtrant la requête sur le nom de la procédure.

@sql est défini comme nvarchar(max), @Name est la base de données cible.

DECLARE c CURSOR FOR 
   SELECT Definition
   FROM [ResiDazeMaster].[sys].[procedures] p
   INNER JOIN [ResiDazeMaster].sys.sql_modules m ON p.object_id = m.object_id

OPEN c

FETCH NEXT FROM c INTO @sql

WHILE @@FETCH_STATUS = 0 
BEGIN
   SET @sql = REPLACE(@sql,'''','''''')
   SET @sql = 'USE [' + @Name + ']; EXEC(''' + @sql + ''')'

   EXEC(@sql)

   FETCH NEXT FROM c INTO @sql
END             

CLOSE c
DEALLOCATE c

0 votes

Merci ... Dans les commentaires, mais non déclarés dans le code sont @sql & @Name : DECLARE @sql NVARCHAR(MAX); DECLARE @Name NVARCHAR(32);

1 votes

Y a-t-il un moyen de faire la même chose sur différents serveurs ? Du serveur A au serveur B ?

5voto

LarryB Points 206

En retard mais donne plus de détails qui pourraient être utiles

Voici une liste de choses que vous pouvez faire avec des avantages et des inconvénients

Générer des scripts en utilisant SSMS

  • Pour : extrêmement facile à utiliser et pris en charge par défaut
  • Cons : scripts pourrait ne pas être dans l'ordre d'exécution correct et vous pourriez obtenir des erreurs si la procédure stockée existe déjà sur la base de données secondaire. Assurez-vous de revoir le scripts avant de l'exécuter.

Outils tiers

  • Pour : des outils tels que ApexSQL Diff (c'est ce que j'utilise mais il en existe beaucoup d'autres comme les outils de Red Gate ou Dev Art) comparera deux bases de données en un clic et générera script que vous pourrez exécuter immédiatement.
  • Cons : ces logiciels ne sont pas gratuits (la plupart des fournisseurs proposent toutefois une version d'essai entièrement fonctionnelle).

Vues du système

  • Pour : Vous pouvez facilement voir quelles procédures stockées existent sur le serveur secondaire et ne générer que celles dont vous ne disposez pas.
  • Cons : Requiert un peu plus de connaissances en SQL

Voici comment obtenir une liste de toutes les procédures d'une certaine base de données qui n'existent pas dans une autre base de données

select *
from DB1.sys.procedures P
where P.name not in 
 (select name from DB2.sys.procedures P2)

4voto

Diego Points 13953

Utiliser

select * from sys.procedures

pour montrer toutes vos procédures ;

sp_helptext @objname = 'Procedure_name'

pour obtenir le code

et votre créativité pour construire quelque chose pour les parcourir en boucle et générer le code d'exportation :)

3voto

jonnyGold Points 2593

Vous pouvez utiliser la fonction "Generate scripts..." de SSMS pour scripts ce que vous devez transférer. Faites un clic droit sur la base de données source dans SSMS, choisissez "Generate scripts...", et suivez l'assistant. Exécutez ensuite votre scripts résultant qui contiendra maintenant les instructions de création de la procédure stockée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X