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 :

Utilisation de tableau en Transact-SQL


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Utilisation de tableau en Transact-SQL
    Bonjour,

    j'ai vu que l'utilisation de tableau n'était pas possible en Transact-SQL mais qu'il était possible de contourner le problème par l'utilisation de table temporaire.

    Quelqu'un pourrait m'indiquer comment faire pour par exemple interpreter un tableau à n lignes et m colonnes.

    Merci de votre aide.

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT toto,tata,tutu INTO #TableTempo FROM ......
    ca va te créer une table temporaire qui sera effacée automatiquement quand tu sortira de ta prod. Le nom des colonnes sera toto,tata,tutu
    j'suis vert !

  3. #3
    Membre habitué
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Points : 151
    Points
    151
    Par défaut
    Salut.
    Vous pouvez utiliser les variables TABLE:
    Si le nombre de colonnes est connu d'avance disons "m=3" alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE @Tableau TABLE( Ligne Int PRIMARY KEY, Col_1 Int, Col_2 Int, Col_3 Int )
    Si le nombre de colonnes est inconnu alors on pourra utiliser la transformation( l : Ligne , c: Colonne )
    et déclarer le tableau comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE @Tableau TABLE( ID Int PRIMARY KEY, Valeur Int )
    Auquel cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T[l,c] = @Tableau[f(l,c)]
    (bien sur codé en SQL proprement).

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Merci de vos réponses.

    Je vais faire comme propose Inoussa.

  5. #5
    Jos
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T[l,c] = @Tableau[f(l,c)]
    Je ne comprends pas bien son application.

    J'apprécierais s'il vous était possible de préciser le tout.

    Merci.

  6. #6
    Membre habitué
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Points : 151
    Points
    151
    Par défaut
    Salut.
    Définition de la fonction f:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE FUNCTION f( @l Int, @c Int, @m Int ) 
      RETURNS Int AS
    BEGIN
      RETURN ( @l * @m ) + @c
    END
    Et pour le reste:
    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
     
    DECLARE @Tableau TABLE( ID Int PRIMARY KEY, Valeur Int )
    DECLARE @l Int, @c Int, @m Int
    -- Pour lire la valeur de la cellule (l,c)
    DECLARE @v Int
    SELECT @v = Valeur
      FROM @Tableau
      WHERE ( ID = dbo.f( @l, @c, @m ) )
     
    -- Pour la mettre à jour
    DECLARE @tmp Int
    SET @tmp = dbo.f( @l, @c, @m )
    IF ( Not Exists( SELECT * FROM @Tableau WHERE ( ID = @tmp ) ) ) BEGIN
      INSERT @Tableau( ID ) VALUES( @tmp )
    END
     
    UPDATE @Tableau
        SET Valeur = @v
      WHERE ( ID = @tmp )
    Remarque : tu peux au départ remplir le tableau de null pour eviter le test d'existence avant la mise à jour.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut plus d'explication
    les gars, je comprend les codes mais je ne vois toujours pas l'utilité de la fonction de remplissage!
    Celle-ci:
    pourquoi y a til 3paramètres à passer au lieu de 2?
    on ne peut pas remplir la table directement avec une boucle?
    je suis dans le mème problème!
    j'ai créé une table comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DECLARE @Car Table(k int Primary key, n tinyint);
    je la rempli comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	While @I <= 12
    	Begin
                   Update @Car	
                   SET n = 0 
                   where k = @I
    	    SET @I = @I +1
               End
    En fait, ma table devrai contenir des zéros mais celle-ci (il me semble) ne contient que des NULL!!
    Pouvez-vous m'expliquer?

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

Discussions similaires

  1. Interrogation d'un tableau Excel via Transact SQL
    Par Dan972 dans le forum ADO.NET
    Réponses: 2
    Dernier message: 21/06/2011, 16h53
  2. Réponses: 2
    Dernier message: 01/07/2009, 10h33
  3. Bienfondé et bénéfices de l'utilisation TRANSACT-SQL
    Par temoanatini dans le forum Développement
    Réponses: 2
    Dernier message: 17/09/2008, 17h36
  4. Réponses: 3
    Dernier message: 03/09/2007, 22h19
  5. Utilisation d'une fonction Transact-SQL ds une requête SQL
    Par Fl0ppeur dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/02/2006, 13h42

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