Script de mise à jour

Le
J
Bonjour,

J'ai un outil, Sql Examiner, qui génère un script permettant de créer
des scripts de mise à jour.

Dans ma base, j'ai une table qui contient un "numéro de version".

Je voudrais ajouter à mon script un contrôle du numéro de version.
Genre :

declare @versionL as int
declare @versionH as int
-- version de la base attendue par le script
select @versionH=1, @versionL=0
if not exists(select 1 from tb_ad_database
where bas_cle=1
and @versionLºs_version_l
and @versionHºs_version_h
)
begin
print 'Erreur : La version de la base est incorrecte.'
print ' Version attendue : ' + cast(@versionH as varchar(10)) +
'.' + cast(@versionL as varchar(10))
select @versionLºs_version_l, @versionHºs_version_h from
tb_ad_database
where bas_cle=1
print ' Version de la base : ' + cast(@versionH as varchar(10)) +
'.' + cast(@versionL as varchar(10))
return
end

/***** ici le script réel de mise à jour **********/




/***** puis le changement de version dans la table ***/

update tb_ad_database set
bas_version_h=1, bas_version_l=1
where bas_cle=1

Ce qui ne fonctionne pas, c'est le RETURN. Je voudrais interrompre le
script si la version enregistrée dans la base ne correspond pas à celle
qui est attendue. J'ai essayé avec plusieurs syntaxes (avec goto par
exemple) mais je n'y arrive pas, on dirait que script est exécuté
entièrement.

Et concernant Sql Examiner, un avis ? Il me semble ok mais pas encore
beaucoup utilisé. D'autres produits ?

Merci.

Jean
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Philippe TROTIN [MS]
Le #11882751
Bonjour,

Comment exécutez vous votre script ?

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"J" : 47b95995$0$750$
Bonjour,

J'ai un outil, Sql Examiner, qui génère un script permettant de créer des
scripts de mise à jour.

Dans ma base, j'ai une table qui contient un "numéro de version".

Je voudrais ajouter à mon script un contrôle du numéro de version.
Genre :

declare @versionL as int
declare @versionH as int
-- version de la base attendue par le script
select @versionH=1, @versionL=0
if not exists(select 1 from tb_ad_database
where bas_cle=1
and @versionLºs_version_l
and @versionHºs_version_h
)
begin
print 'Erreur : La version de la base est incorrecte.'
print ' Version attendue : ' + cast(@versionH as varchar(10)) + '.' +
cast(@versionL as varchar(10))
select @versionLºs_version_l, @versionHºs_version_h from
tb_ad_database
where bas_cle=1
print ' Version de la base : ' + cast(@versionH as varchar(10)) + '.' +
cast(@versionL as varchar(10))
return
end

/***** ici le script réel de mise à jour **********/

...
...

/***** puis le changement de version dans la table ***/

update tb_ad_database set
bas_version_h=1, bas_version_l=1
where bas_cle=1

Ce qui ne fonctionne pas, c'est le RETURN. Je voudrais interrompre le
script si la version enregistrée dans la base ne correspond pas à celle
qui est attendue. J'ai essayé avec plusieurs syntaxes (avec goto par
exemple) mais je n'y arrive pas, on dirait que script est exécuté
entièrement.

Et concernant Sql Examiner, un avis ? Il me semble ok mais pas encore
beaucoup utilisé. D'autres produits ?

Merci.

Jean


J
Le #11882741
Philippe TROTIN [MS] a écrit :
Bonjour,

Comment exécutez vous votre script ?



Avec l'analyseur de requête. Avec SqlServer 2000.

Jean
Philippe TROTIN [MS]
Le #11882551
Bonjour,

Attention si le script que vous mettez entre votre test de numéro de version
et votre mise a jour contient un GO, il n'y aura pas d'interruption.


Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"J" : 47ba024d$0$2809$
Philippe TROTIN [MS] a écrit :
Bonjour,

Comment exécutez vous votre script ?



Avec l'analyseur de requête. Avec SqlServer 2000.

Jean


J
Le #11882531
Philippe TROTIN [MS] a écrit :
Bonjour,

Attention si le script que vous mettez entre votre test de numéro de
version et votre mise a jour contient un GO, il n'y aura pas
d'interruption.



Merci pour cette info.

L'outil SQL Examiner génère un script de ce type :


/*
Script created by SQL Examiner 2.1.0.78 at 02/18/2008 09:42:24.
Run this script on (local).xxx1 to make it the same as (local).xxx
*/
SET NOCOUNT ON
SET NOEXEC OFF
SET ARITHABORT ON
SET XACT_ABORT ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRAN
GO
--step 1: dbo.tb_ge_resas: add foreign key
FK_tb_ge_resas_tb_ad_utilisateurs------------------------
GO
ALTER TABLE [dbo].[tb_ge_resas] ADD CONSTRAINT
[FK_tb_ge_resas_tb_ad_utilisateurs] FOREIGN KEY ([rso_utilisateur])
REFERENCES [dbo].[tb_ad_utilisateurs] ([uti_cle])
GO
IF @@ERROR <> 0 AND @@TRANCOUNT > 0 BEGIN PRINT 'step 1 is completed
with errors' ROLLBACK TRAN END
GO
IF @@TRANCOUNT = 0 BEGIN PRINT 'step 1 is completed with errors' SET
NOEXEC ON END
GO
...

Il n'y a pas de moyen de mettre ce script dans un bloc if / begin / end ?


Merci.

Jean
Publicité
Poster une réponse
Anonyme