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 :

Projet ACCESS/SQL-Server2000 : Table temporaire locale ou ?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Par défaut Projet ACCESS/SQL-Server2000 : Table temporaire locale ou ?
    Voici deux exemples de codes testés...

    ALTER PROCEDURE dbo.Test2
    AS
    CREATE TABLE dbo.t (REF VARCHAR(50) PRIMARY KEY)
    INSERT INTO dbo.t
    SELECT REF FROM dbo.T_A20_Location
    WHERE (Année=2008 AND Période=2)
    ==> Création d'une table classique OK

    Mais la procédure suivante ne donne rien...

    ALTER PROCEDURE dbo.Test2
    AS
    CREATE TABLE dbo.#t (REF VARCHAR(50) PRIMARY KEY)
    INSERT INTO dbo.#t
    SELECT REF FROM dbo.T_A20_Location
    WHERE (Année=2008 AND Période=2)
    Est-ce qu'une table temporaire créé dans une store procedure est automatiquement "détruite" à la fin de la procédure?

    Si oui, mon problème demeure.
    Comment faire pour récupérer des données dans un écran de type feuille de données au niveau local car plusieurs utilisateurs interrogent la bdd en même temps avec des paramètres différents.

    J'avais pensé simplement à une store procedure mais j'ai des paramètres de type string à passer (par ex Communes ci-dessous, voici un exemple SQL utilisée en Access créé dynamiquement :

    SELECT REF FROM Panneaux
    WHERE (PENTURE_AF = "A") AND ((Commune = "Bruxelles") OR (Commune = "Mons")) AND (NOT (REF IN (SELECT REF FROM T_A20_Location WHERE Année = 2008) AND ((Période = 2) OR (Période = 3))))))
    ORDER BY REF
    Pouvez-vous m'aider svp.

    Fred.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Par défaut
    Bonne Année 2008 à vous tous,

    Oui, je sais que c'est une journée spéciale mais une petite explication serait la bienvenue.

    Pour résume, en mdb Access, j'ai beaucoup de code vba qui crée des requêtes dynamiques en local (de type SELECT). Cela doit fonctionner en local car il y a plus de 10 personnes qui interrogent la bdd en même temps avec des demandes différentes.

    Comment obtenir ce même résultat en Projet Access/SQL-Server2000?

    Via des tables temporaires : lorsque je crée une table temporaire via la store procedure mentionnée dans le post ci-dessus, j'ai l'impression que celle-ci est "effacée" à la fin de la procédure. Est-ce exact?

    Pouvez-vous m'aider ?

    D'avance merci.

    Fred.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Une table temporaire locale est propre à la session et est détruite :
    soit par un ordre DROP TABLE dans la sesion de l'utilisateur qui l'a créée
    soit par déconnexion de l'utilisateur.

    peut être est-te vous déconnecté entre la fin de la proc stock et la suite ?

    Sinon votre PS est correcte à un détail près, il est inutile de mettre dbo. devant le nom des tables temporaires :
    ALTER PROCEDURE dbo.Test2
    AS
    CREATE TABLE #t (REF VARCHAR(50) PRIMARY KEY)
    INSERT INTO #t
    SELECT REF FROM dbo.T_A20_Location
    WHERE (Année=2008 AND Période=2)

    Enfin pour votre requête créée dinamiquement, vous pouvez faire un IN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT REF FROM Panneaux
    WHERE  PENTURE_AF = "A" 
      AND  Commune IN ('Bruxelles', 'Mons'
      AND  NOT REF IN (SELECT REF 
                       FROM   T_A20_Location 
                       WHERE Année = 2008) 
      AND  Période IN (2, 3)
    ORDER  BY REF
    Ce sera plus claire, plus élégant et plus facile à créer.
    En sus le délimiteur des chaines de caractères en SQL c'est l'apostrophe (simple quote ' ) et non le guillemet (double quote " )

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Une table temporaire locale est propre à la session et est détruite :
    soit par un ordre DROP TABLE dans la sesion de l'utilisateur qui l'a créée
    soit par déconnexion de l'utilisateur.

    peut être est-te vous déconnecté entre la fin de la proc stock et la suite ?

    Sinon votre PS est correcte à un détail près, il est inutile de mettre dbo. devant le nom des tables temporaires :
    ALTER PROCEDURE dbo.Test2
    AS
    CREATE TABLE #t (REF VARCHAR(50) PRIMARY KEY)
    INSERT INTO #t
    SELECT REF FROM dbo.T_A20_Location
    WHERE (Année=2008 AND Période=2)

    Enfin pour votre requête créée dinamiquement, vous pouvez faire un IN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT REF FROM Panneaux
    WHERE  PENTURE_AF = 'A' 
      AND  Commune IN ('Bruxelles', 'Mons')
      AND  NOT REF IN (SELECT REF 
                       FROM   T_A20_Location 
                       WHERE Année = 2008) 
      AND  Période IN (2, 3)
    ORDER  BY REF
    Ce sera plus claire, plus élégant et plus facile à créer.
    En sus le délimiteur des chaines de caractères en SQL c'est l'apostrophe (simple quote ' ) et non le guillemet (double quote " )

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Par défaut
    Cher SQL-Pro,

    Je te remercie pour tes explications détaillées et également pour ton éclairage sur l'utilisation de "IN" dans ma requête.

    Je vais maintenant chercher comment fonctionne les liaisons entre le projet Access et SQL_Server.

    A bientôt,

    Fred.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/01/2008, 21h22
  2. connexion projet Access à SQl serv 2005 exp
    Par a29595 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/01/2007, 19h44
  3. [sql-8]table temporaire # : Pourquoi?
    Par Baquardie dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/10/2006, 00h50
  4. [ACCESS] créer une table temporaire
    Par geay dans le forum Access
    Réponses: 4
    Dernier message: 09/10/2006, 09h45
  5. Projet Access - SQL Server
    Par gunico dans le forum Projets ADP
    Réponses: 5
    Dernier message: 26/04/2006, 13h45

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