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 :

[SQL Serveur 2000] Appel dynamique de table


Sujet :

MS SQL Server

  1. #1
    Membre actif Avatar de David.V
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 191
    Points : 203
    Points
    203
    Par défaut [SQL Serveur 2000] Appel dynamique de table
    Bonjour, sur nos applications actuels, nous utilisons aujourd'hui sur notre serveur un certains nombre de bases fixes (que j'appellerais A, B et C pour l'exemple). Certainnes procédures stockées nécessitent de ramener des données d'une base à l'autre du style

    depuis le serveur B :
    SELECT * FROM A.DBO.Table1

    Nous envisageons de rendre nos applications "multi base", c'est à dire qu'au lieu d'avoir un serveur avec uniquement les bases A, B, et C, nous aurions pour chaque client, une copie de ces bases sous la forme A1, B1 et C1 pour pour le client 1, et ainsi de suite.

    Le problème, ce sont ces appels inter base dans certainnes des procédures stockées. Est-ce qu'il existe un moyen de ne pas avoir en dur dans le script le nom de serveur que l'on référence ? J'ai envie de dire que non pour ma part aprés les recherches que j'ai faite, mais je préfère avoir d'autre avis.

    Merci d'avance pour toute suggestion utile

    Edit : je n'avais pas précisé qu'il ne faut pas non plus passer par une requête dynamique, c'est difficilement envisageable de ré-écrire toutes les procédures qui utilisent des appels inter base.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    je comprend pas où est le pb ?
    tu peux créer la base A sur le serveur1 et sur le serveur2, il suffit que ton appli "tapes" dans le bon serveur.ex:

    serveur1 => base A,B,C
    serveur2 => base A,B,C
    etc...
    Errare humanum est, perseverare diabolicum (Sénèque)

  3. #3
    Membre actif Avatar de David.V
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 191
    Points : 203
    Points
    203
    Par défaut
    Le problème est de faire du "multi base" sur le même serveur. Sur différent serveur, ça ne pose pas de problème en effet. Mais sur un seul serveur ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    il te suffit de créer une instance par "poste" => cela équivaut a faire x serveurs sur le même
    Errare humanum est, perseverare diabolicum (Sénèque)

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Le seul soucis pour ta méthode c'est la contre performance puis que la seule solution c'est de passer par le sql dynamique.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    sous sql 2005 il y aurait 2 moyens :

    avec les schema (tu peux alors avoir 2 objets avec le même nom dans une même base ex :

    A.client1.table
    A.client2.table
    ...

    et en fonction du login utilisé, le schema par défaut est client1 ou client2 etc.

    par contre il te faut un login par client.
    ------------------
    si tu dois absolument garder 3 base par client (arf !) tu peux toujours tenter l'aventure des synonymes (un beau tas de spaghettis en perspective ...)

    tu créés une base D (donc une 4ième base) par client dans laquelle seront stockés les synonymes qui pointeront vers les objets répartis dans les 3 autre s bases A, B, C.

    ex :
    D1.dbo.factures -> A1.dbo.factures
    D1.dbo.histo -> B1.dbo.histo
    D2.dbo.factures -> A2.dbo.factures
    D2.dbo.commandes -> C2.dbo.commandes
    ...
    ce qui fait que tu peux garder le même code dans tes procs (qui n'accéderont qu'aux objets de la base Dx) quel que soit ton client... mais bon ça fait peur comme soluce.

    Pourquoi ne pas tout stocker dans une seule base ?
    Emmanuel T.

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Malheureusement, il utilise la version 2000 donc le sql dynamique s'impose.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Membre actif Avatar de David.V
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 191
    Points : 203
    Points
    203
    Par défaut
    Merci pour ces réponses. Effectivement, je suis en 2000 et on va y rester pour le moment car ça demande du travail pour passer un jour sur 2005. Et quant-au SQL Dynamique, l'inconvenient en dehors du soucis de performance, c'est aussi la taille max de la chaine que l'on peut executer, à savoir 8000 caractères maximum en varchar. Or il arrive que certainnes procedure soit plus longue que cette limite...

    C'est un peu l'impasse donc

  9. #9
    Membre actif Avatar de David.V
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 191
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par kagemaru
    Pourquoi ne pas tout stocker dans une seule base ?
    On y a pensé en effet, mais le problème c'est qu'il y a un risque de conflit entre les noms des tables et des objets.

    Ta solution avec les schémas pourrait m'interesser, quite à migrer sur SQL Server 2005 dans l'histoire. Est-ce qu'elle implique d'avoir tout dans la même base ou est-ce que je pourrais garder les 3 bases ?

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 839
    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 839
    Points : 52 932
    Points
    52 932
    Billets dans le blog
    5
    Par défaut
    Vous pouvez quand même utiliser les schémas dans la version 2000. C'est un poil plus compliqué pour la création des dists schémas, mais après il n'y aura aucun inconvénient.

    Dans sql server 2000 une confusion est faite entre le schéma et son propriétaire qui est un utilisateur SQL. Il suffit donc de créer un utilisateur SQL pour chacun des schéma à mettre en oeuvre dans la base et le tout est joué. De plus cette manière de faire sera très facilement portable dans la v 2005.

    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/ * * * * *

  11. #11
    Membre actif Avatar de David.V
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 191
    Points : 203
    Points
    203
    Par défaut
    Merci pour l'info SQLpro

    Sans vouloir abuser, tu n'aurais pas un bon lien vers un tuto qui explique comment ça marche et le mettre en oeuvre ?

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 839
    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 839
    Points : 52 932
    Points
    52 932
    Billets dans le blog
    5
    Par défaut
    Non, car je suis en déplacement et cela est chez moi. Mais c'est pas très difficile :
    1) créer les logins avec SP_addlogin
    2) créer les utilisateurs avec sp_grantdbaccess
    3) créer les tables dans les users

    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
    USE MASTER
    GO
     
    EXEC SP_addlogin 'log1', 'pass1'
    EXEC SP_addlogin 'log2', 'pass2'
    EXEC SP_addlogin 'log3', 'pass3'
     
    GO
     
    USE mabase
    GO
     
    SP_grantdbaccess 'log1', 'user1'
    SP_grantdbaccess 'log2', 'user2' 
    SP_grantdbaccess 'log3', 'user3'
    GO
     
    CREATE TABLE user1.t_1 (c int);
    CREATE TABLE user2.t_1 (c int);
    CREATE TABLE user3.t_1 (c int);
     
    INSERT INTO user1.t_1 VALUES (11)
    INSERT INTO user2.t_1 VALUES (22)
    INSERT INTO user3.t_1 VALUES (33)
     
    SELECT *, 'user1' AS SCHEMA_NAME
    FROM    user1.t_1
    UNION
    SELECT *, 'user2' AS SCHEMA_NAME
    FROM    user2.t_1
    UNION
    SELECT *, 'user2' AS SCHEMA_NAME
    FROM    user2.t_1

    ...

    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/ * * * * *

  13. #13
    Membre actif Avatar de David.V
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 191
    Points : 203
    Points
    203
    Par défaut
    Hummmm d'accord merci...

    Mais si j'ai bien compris, je dois recréer les tables ? Je ne peux pas réaffecter des tables acctuellement en production à un user ?

  14. #14
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 839
    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 839
    Points : 52 932
    Points
    52 932
    Billets dans le blog
    5
    Par défaut
    désolé je n'ai pas de SQL Server 2000 à portée de main, donc difficile de te répondre, mais il est possible de changer le "owner" d'un objet, il y a une ps pour cela.

    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/ * * * * *

  15. #15
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  16. #16
    Membre actif Avatar de David.V
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 191
    Points : 203
    Points
    203
    Par défaut
    D'accord, merci pour ces renseignements

Discussions similaires

  1. Affichage des tables sql serveur 2000 sous delphi7
    Par Zizou7 dans le forum Bases de données
    Réponses: 8
    Dernier message: 10/06/2013, 11h54
  2. Réponses: 0
    Dernier message: 22/01/2009, 11h31
  3. Supprimer une image dans une table SQL Serveur 2000
    Par Soobook dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/09/2006, 17h00
  4. [SQL SERVEUR 2000] DTS Dynamique
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/05/2006, 11h23
  5. Recreer les indexs de table dans SQL serveur 2000
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/03/2006, 15h30

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