[Résolu] Recopie de procs stocks dynamiques entre serveurs
Le titre est assez torturé mais mon besoin est assez simple. Je vais quand même prendre le temps de présenter le contexte au cas où l'un de vous ait une idée lumineuse qui fasse que je n'ai plus à me poser cette question.
Alors voilà: j'ai deux serveurs SQL Server 2000: un de production et l'autre de back-up.
La synchronisation de ces 2 serveurs se fait de 2 façons distintes et complémentaires:
- La synchro des données de production est assurée par une alimentation simultanée des deux bases qui tournent en continu.
- La synchro du paramétrage de l'application cliente de consultation se fait lui par jobs.
Si cette seconde synchro est parfaite pour la mise à niveau des qqs tables contenant les données de configuration, j'ai un problème en qui concerne des procédures stockées construites dynamiquement depuis l'application cliente et qui font partie intégrante de la configuration (définition de filtre de récupération de données par exemple).
Toute dynamique qu'elle soit, la création de ces procédures répond à une norme de nommage qui me permet de les identifier facilement et je peux récupérer leur requête de création par la requête suivante :
Code:
1 2 3 4 5 6 7 8 9
| select
c.text
from dbo.sysobjects o, dbo.syscomments c
where (OBJECTPROPERTY(o.id, N'IsProcedure') = 1
or OBJECTPROPERTY(o.id, N'IsExtendedProc') = 1
or OBJECTPROPERTY(o.id, N'IsReplProc') = 1)
and o.name like N'CBPC_%'
and o.id=c.id
go |
Je peux lancer cette requête depuis le serveur de back-up vers le serveur de prod pour ainsi récupérer toutes les procs stocks de celui-ci qui m'intéressent.
En exécutant cette requête dans un curseur je comptais exécuter le contenu c.text.
Mon problème est alors que le contenu de ce champs n'est généralement pas en une ligne mais en plusieurs.
Comment lancer l'exécution d'une requête transac-SQL, sur plusieurs lignes, contenue dans un champs text ?
J'ai essayé ça au début :
Code:
1 2 3 4 5 6 7 8 9
| set @request = (select c.ctext from
dbo.sysobjects o, dbo.syscomments c where (OBJECTPROPERTY(o.id, N'IsProcedure') = 1 or OBJECTPROPERTY(o.id, N'IsExtendedProc') = 1 or OBJECTPROPERTY(o.id, N'IsReplProc') = 1) and o.name like N'SXPS_MO_Display_COLOR_CBI' and o.id=c.id)
set @command = 'osql -SmonServeur -UmonUser -PmonPwd -dmaBase -q' + @request
print @command
use master
exec xp_cmdshell @command |
mais ça ne marche pas car, en gros, il ne retient de ma requête que le "CREATE PROCEDURE tartampion" puis le reste est ignoré :?
Je pense que ça ne doit pas être sorcier mais là vraiment je sèche. Des idées qui marchent ??? :roll: :D