PascalCmoa
Messages postés239Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention17 janvier 2013
-
30 sept. 2008 à 15:43
PascalCmoa
Messages postés239Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention17 janvier 2013
-
1 oct. 2008 à 11:29
Bonjour,
Je suis complètement nouveau dans la création de curseur sous MS SQL Server 2005 (pour cause je bossais sur MySQL 4). Voilà je dois créer un job qui doit me réaliser certaine chose. Dont l'une est de remplir une table d'un serveur SQL A vers une table d'un serveur SQL B. L'insert ne doit se faire que sur les nouveaux enregistrements.
J'ai donc réalisé le script suivant:
-- Déclaration des variables récupérant les données à insérer dans la table TIERS.
DECLARE @TIERS_NUM varchar(17),
@TIERS_INTITULE varchar(35),
@TIERS_CLASSEMENT varchar(17)
-- Déclaration du curseur
DECLARE curseurTIERS CURSOR FOR
SELECT
CT_NUM,
CT_INTITULE,
CT_CLASSEMENT
FROM [SERVER-A].[BASE_A].dbo.F_COMPTET
where
CT_TYPE = 0
-- Ouverture du curseur
OPEN curseurTIERS
-- On se place sur le premier enregistrement recupérer par le curseur
FETCH NEXT FROM curseurTIERS INTO @TIERS_NUM, @TIERS_INTITULE, @TIERS_CLASSEMENT
-- Tant que le curseur obtient un ligne d'enregistrement
WHILE @@FETCH_STATUS = 0
BEGIN
-- On teste si le champ n'est pas connu dans la table
IF NOT EXISTS (SELECT * FROM [SERVER_B].[BASE_A].dbo.BUD_TIERS WHERE TIERS_NUM = @TIERS_NUM)
BEGIN
-- Si il est inconnu de la table, on insert les données.
INSERT INTO [SERVER_B].[BASE_A].dbo.BUD_TIERS (TIERS_NUM, TIERS_INTITULE, TIERS_CLASSEMENT)
VALUES(@TIERS_NUM, @TIERS_INTITULE, @TIERS_CLASSEMENT)
-- On passe à l'enregistrement suivant
FETCH NEXT FROM curseurTIERS INTO @TIERS_NUM, @TIERS_INTITULE, @TIERS_CLASSEMENT
END
END
-- Fermeture du curseur
CLOSE curseurTIERS
-- Libération de la mémoire du curseur créé.
DEALLOCATE curseurTIERS
Pour premier test, je n'ai pris que les 3000 premiers enregistrements => OK
Pour le second test, j'ai gardé les 3000 premiers enregistrements, mais je veux ajouter les autres manquant (il y a environ plus de 6000 enregistrements). => Pour moi pas OK car cela prends enormément de temps d'une part, d'autre part les derniers enregistrements n'ont pas été insérer.
J'aimerai donc savoir si j'ai fait une erreur dans la création de mon curseur. Si oui quelle est-elle ?
PascalCmoa
Messages postés239Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention17 janvier 20135 1 oct. 2008 à 11:29
Merci pour la réponse et les conseils.
Je vais faire ce que tu as écrit. Finalement, c'est le temps mis par mon curseur qui m'a inquiété (pour rien ), par contre je vais utiliser tes conseils pour optimiser le temps de traitement.