IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Comment sauvegarder les procédures stockées d'une base de données ?


Sujet :

Administration SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Collégien
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment sauvegarder les procédures stockées d'une base de données ?
    j'essaye de créer un script pour sauvegarde les procédures stockées d'une base de données dans un fichier externe, ça marche mais le problème qu'il ne sauvegarde pas tout le contenu de la procédure, exemple si on a une procédure qui contient 78000 caractères sue la BD, dans le fichier de sauvegarde pour la même procédure contient juste 42000 caractères.
    Voilà mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ALTER PROCEDURE [dbo].[sp_Script_StoredProc]
    	-- Add the parameters for the stored procedure here
    	@Database NVARCHAR(50),
    	@FileName nvarchar(255)
    AS
    BEGIN
     
    	 SET NOCOUNT ON;
     
    	 DECLARE @Query VARCHAR(MAX)
     
    	 DELETE FROM tmpScriptSp
     
    	SELECT * FROM tmpscriptsp
     
    	set @Query = 'insert into tmpScriptSp(sp_name, SaveSP, BD) 
    	SELECT  SPECIFIC_NAME AS Nom_Procedure, ROUTINE_DEFINITION AS contenu_Procedure, SPECIFIC_CATALOG AS Data_Base FROM ' + @Database + '.INFORMATION_SCHEMA.ROUTINES PROCS ORDER BY PROCS.SPECIFIC_NAME'
    	Print(@Query)
    	Execute( @Query)
     
    	DECLARE @szBCP VARCHAR(256);
    	SET @szBCP = 'bcp "SELECT savesp FROM ceratecp21.dbo.tmpScriptsp" queryout "C:\Scripts_SQL\'  + @Filename + '" -T -c'
    	EXEC master.dbo.xp_cmdshell @szBCP;
    END
    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    C'est normal. Dans le vue normalisées INFORMATION_SCHEMA.ROUTINES la colonne DEFINITION est typée NVARCHAR(4000). Tu n'as donc que les 4000 premiers caractères (et non 40000).

    Il faut aller dans la vue système sys.sql_modules qui centralise les définition des objets de types vue, procédures, UDF et déclencheur.

    Tout ceci pouvant être simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR ALTER PROCEDURE [dbo].[sp_Script_StoredProc]
    	-- Add the parameters for the stored procedure here
    	@Database NVARCHAR(50),
    	@FileName nvarchar(255)
    AS
    BEGIN
       SET NOCOUNT ON;
       DECLARE @Query NVARCHAR(MAX) = REPLACE('SELECT s.name AS ROUTINE_SCHEMA, o.NAME AS ROUTINE_NAME, m.DEFINITION FROM #.sys.sql_modules AS m JOIN #.sys.objects AS o ON m.object_id = o.object_id JOIN #.sys.schemas AS s ON o.schem_id = s.schema_id;', '#', @Database);
       DECLARE @szBCP NVARCHAR(1000)= N'bcp "' + @Query +  N'" queryout "C:\Scripts_SQL\'  + @Filename + N'" -T -c';
       EXEC xp_cmdshell @szBCP;
    END
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [2012] Récupérer les procédures stockées d'une base endomagée
    Par stdebordeau dans le forum Administration
    Réponses: 20
    Dernier message: 01/06/2015, 17h41
  2. Réponses: 4
    Dernier message: 19/02/2015, 16h41
  3. Débutant : comment échapper les caractères venant d'une base de donnée ?
    Par powerwave dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 24/11/2014, 16h57
  4. Réponses: 14
    Dernier message: 16/09/2011, 00h38
  5. Liste des procédures stockées d'une base de données
    Par Delphi-ne dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/03/2008, 19h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo