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

MS SQL Server Discussion :

Procédure Stockée "Arrangement de doublons"


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut Procédure Stockée "Arrangement de doublons"
    Bonjour,

    Le titre n'est pas explicite mais je vais essayer de m'expliquer.

    J'ai une table contenant plusieurs milliers de données. Elle se trouve dans une forme comparable à celle ci :

    id champ1 champ2 champ3
    1 1 1 1
    1 1 2 3
    1 1 2 1
    2 4 5 5
    2 5 5 5

    que j'aimerai tranformer en

    id champ1 champ2 champ3
    1 1 1,2 1,3
    2 4,5 5 5

    Donc en gros, j'aimerais ramener toutes les informations pour les id similaires en une table qui a pour clé primaire id... Histoire de ramener facilement des informations aux utilisateurs.

    Pour cela, j'ai commencer à étudier le transact SQl (que je connais pas trop), mais la procédure stockée fait un time-out.

    Voici la procédure stockée (ramenée a l'exemple au dessus)

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    CREATE PROCEDURE CONSOLIDATION
    AS
     
    -- DECLARATION DES VARIABLES
    DECLARE @NomTable varchar(10)
    DECLARE @SQL varchar(2000)
    DECLARE @champ1 varchar(8000)
    DECLARE @Champ2 varchar(8000)
    DECLARE @champ3 varchar(8000)
    DECLARE @id varchar(100)
     
     
    SET @champ1= ''
    SET @champ2= ''
    SET @champ3= ''
     
    -- DECLARATION DU CURSEUR POUR CHACUN DES ID
    DECLARE curs CURSOR
    FOR
    	SELECT id
    	FROM DONNEES_NON_CONSOLIDEES
    	ORDER BY id DESC
     
     
    SET @NomTable = 'DONNEES_CONSOLIDEES'
     
    -- Suppression des entrées si la table existe, sinon on créé la table
    IF EXISTS(SELECT * FROM   INFORMATION_SCHEMA.tables WHERE  TABLE_NAME = @NomTable)
    	DELETE FROM DONNEES_CONSOLIDEES
    ELSE
    	CREATE TABLE DONNEES_CONSOLIDEES
    	(id varchar(15),
    	champ1 varchar(8000),
    	champ2 varchar(8000),
    	champ3 varchar(8000))
     
    OPEN curs
    -- POUR CHAQUE ID
    FETCH curs INTO @id
    While @@fetch_status = 0
    -- ON RECUPERE DANS DES VARIABLES TOUTES LES COLONNES DE TOUTES LES LIGNES DES DIFFERENTES COLONNES POUR L'ID EN COUR
    BEGIN
    	SELECT @champ1=@champ1+COALESCE(champ1 + ', ', ''), @champ2=@champ2+COALESCE(champ2+ ', ', ''), @champ3=@champ3+COALESCE(champ3+ ', ', '')
    	FROM DONNEES_NON_CONSOLIDEES
    	WHERE id = @id
    -- AVEC CES VARIABLES ON LES INSERT DANS LA NOUVELLE TABLE
    	INSERT INTO DONNEES_CONSOLIDEES(id, champ1, champ2, champ3) VALUES (@id, @champ1, @champ2, @champ3)
    	SET @champ1= ''
    	SET @champ2= ''
    	SET @champ3= '' 
    	FETCH curs INTO @id
    END
    CLOSE curs
    DEALLOCATE curs
     
    GO
    Voila, je ne vois pas ou est l'erreur étant donné mon noobisme en transact SQL.
    Pourrais-je solliciter votre aide ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut timeout.
    je doute que ce soit sql serveur qui génère un timeout, il s'agit de ton langage de programmation préféré qui génère un timeout sur une requete.

    tu peux parametré le timeout de ta connexion et de ton objet command si il s'agit de .net.

    autre solution plus ambitieuse mais pas toujours possible : optimiser la requete pour ne pas depasser 30 sec d'executions.

  3. #3
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Je n'utilise pas de langage de prog pour le moment. J'execute la procédure stockée via SQL Server pour le moment. La table se crée bien mais rien n'est insérée dedans

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    Je regarderais ta procédure ce soir... A+

    il manque le begin et le end

  5. #5
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    J'ai peut être localisé le problème :

    Il se situerai au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FETCH curs INTO @id
    While @@fetch_status = 0
    -- ON RECUPERE DANS DES VARIABLES TOUTES LES COLONNES DE TOUTES LES LIGNES DES DIFFERENTES COLONNES POUR L'ID EN COUR
    BEGIN
    	SELECT @champ1=@champ1+COALESCE(champ1 + ', ', ''), @champ2=@champ2+COALESCE(champ2+ ', ', ''), @champ3=@champ3+COALESCE(champ3+ ', ', '')
    	FROM DONNEES_NON_CONSOLIDEES
    	WHERE id = @id
    -- AVEC CES VARIABLES ON LES INSERT DANS LA NOUVELLE TABLE
    	INSERT INTO DONNEES_CONSOLIDEES(id, champ1, champ2, champ3) VALUES (@id, @champ1, @champ2, @champ3)
    	SET @champ1= ''
    	SET @champ2= ''
    	SET @champ3= '' 
    	FETCH curs INTO @id
    END

  6. #6
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Bon, ba ca marche ...

    La procédure était fonctionnelle ... Le Time Out arrivait car j'exécutais la fonction dans un mauvais endroit. Avec SQL Suery Analyzer, tout fonctionne correctement.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Procédure stockée : gestion des doublons dans une table
    Par Mothership dans le forum Administration
    Réponses: 4
    Dernier message: 22/07/2009, 11h29
  3. Réponses: 9
    Dernier message: 28/10/2008, 21h30
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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