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

Développement SQL Server Discussion :

Requête sur une Vue multi Bases [2008R2]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2020
    Messages : 18
    Par défaut Requête sur une Vue multi Bases
    Bonjour,

    J'ai créé une vue qui me permet de récupérer une série d'information via une requête SQL.
    Cette vue a été créée sur toutes mes bases (au sein de la même instance SQL Serveur)avec le même nom Transaction_RepView

    J'arrive à l'exécuter sur les bases distinctes nom de mes base 004 à 011

    Mon soucis est que je ne sais pas configurer une requête multi bases.

    Quelqu'un pour m'aider.

    Par avance merci.

    Philippe

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    bonjour,

    Vous pouvez appeler la vue d'une base différente du contexte d'exécution en spécifiant un nom en trois parties : [base].[schéma].[Vue]

    donc par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT ...
    FROM [004].dbo.Transaction_RepView
    UNION ALL
    SELECT ...
    FROM [005].dbo.Transaction_RepView
    ...
    sinon, en fonction du besoin, vous pouvez aussi utiliser la procédure non documentée Sp_MSForEachDB

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai ceci dans mes notes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXECUTE sp_msforeachdb 'use [?]; IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ''UneTable'' )
    SELECT ''?'' as DatabaseName, * FROM dbo.UnTable'
    Dernière modification par al1_24 ; 11/03/2020 à 14h19. Motif: Balises CODE

  4. #4
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2020
    Messages : 18
    Par défaut La requête ne fonctionne pas.
    Citation Envoyé par aieeeuuuuu Voir le message
    bonjour,

    Vous pouvez appeler la vue d'une base différente du contexte d'exécution en spécifiant un nom en trois parties : [base].[schéma].[Vue]

    donc par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT ...
    FROM [004].dbo.Transaction_RepView
    UNION ALL
    SELECT ...
    FROM [005].dbo.Transaction_RepView
    ...
    sinon, en fonction du besoin, vous pouvez aussi utiliser la procédure non documentée Sp_MSForEachDB

    J'ai testé votre réponse, mais j'ai un message d'erreur :

    Voici la requête que j'ai exécutée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT *
    FROM  [004].[dbo].[GbkmutViewTransaction_RepView]
    UNION ALL
    SELECT *
    FROM  [005].[dbo].[GbkmutViewTransaction_RepView]
    Msg 457, Level 16, State 1, Line 2
    La conversion implicite de la valeur char vers char ne peut pas être effectuée, car le classement de la valeur n'est pas résolu en raison d'un conflit de classement.

    Je vous ajoute la requête qui est faite sur ma vue qui elle fonctionne base par base :

    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
     
    SELECT     TOP (100) PERCENT dbo.gbkmut.CompanyCode AS Company, ISNULL(dbo.gbkmut.freefield2, ' ') AS CompanyOrigine, dbo.gbkmut.bkjrcode AS Year, 
                          dbo.gbkmut.periode AS Period, dbo.gbkmut.datum AS date, dbo.gbkmut.dagbknr AS Journal, dbo.gbkmut.reknr, dbo.grtbk.Class_07 AS CostCatReel, 
                          dbo.grtbk.Class_09 AS CostCatBud, dbo.kstpl.Class_01 AS MFMUGF, dbo.kstpl.Class_02, dbo.kstpl.Class_03 AS Donor, dbo.gbkmut.kstplcode AS CostCenter, 
                          dbo.gbkmut.kstdrcode AS CostUnit, dbo.gbkmut.oms25 AS Description, ROUND(dbo.gbkmut.bdr_val, 2) AS Amountcurr, dbo.gbkmut.valcode AS CurrencyTransaction, 
                          dbo.gbkmut.koers AS RateTransaction, ROUND(dbo.gbkmut.bdr_hfl, 2) AS Amount, dbo.gbkmut.CurrencyCode AS CurrencyCompany, 
                          dbo.gbkmut.faktuurnr AS Reference, dbo.gbkmut.syscreated AS CreationDate, dbo.gbkmut.syscreator AS Creatorcode, dbo.humres.fullname AS Creator, 
                          dbo.gbkmut.sysmodified AS ModificationDate, dbo.gbkmut.sysmodifier AS Modifier, dbo.gbkmut.Rate, dbo.gbkmut.warehouse, dbo.gbkmut.bud_vers, 
                          dbo.gbkmut.transtype, dbo.gbkmut.transsubtype
    FROM         dbo.gbkmut INNER JOIN
                          dbo.grtbk ON dbo.gbkmut.reknr = dbo.grtbk.reknr INNER JOIN
                          dbo.kstpl ON dbo.gbkmut.kstplcode = dbo.kstpl.kstplcode INNER JOIN
                          dbo.kstdr ON dbo.gbkmut.kstdrcode = dbo.kstdr.kstdrcode INNER JOIN
                          dbo.humres ON dbo.gbkmut.syscreator = dbo.humres.res_id
    WHERE     (dbo.gbkmut.reknr > 599999) AND (dbo.gbkmut.bkjrcode = 2020) AND (dbo.gbkmut.transsubtype NOT IN ('R', 'S')) AND (dbo.gbkmut.bud_vers IS NULL) AND 
                          (dbo.gbkmut.periode BETWEEN 1 AND 12) AND (dbo.gbkmut.dagbknr NOT IN ('903', '909', '915', 'NULL'))
    ORDER BY dbo.humres.costcenter, CostUnit, Period, date, dbo.gbkmut.reknr, dbo.gbkmut.bdr_hfl
    Pouvez-vous m'aider ?

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    vous avez un classement différent entre les deux vues pour au moins une colonne.

    vous avez probablement un classement par défaut différent au niveau des bases.

    Vous pouvez spécifier le classement à utiliser, avec la clause COLLATE par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT 
        LaColonne COLLATE FRENCH_CI_AI
    ,...

  6. #6
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2020
    Messages : 18
    Par défaut
    J'ai enlevé tous les Order by, donc plus de classement, et j'ai toujours la même erreur.
    Donc çà doit venir d'autre chose.

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    1/ les ORDER BY n’ont aucun sens dans une vue, donc oui, enlevez les; Faites si besoin un ORDER BY dans la requête finale. Profitez-en pour enlever les TOP 100 PERCENT.

    2/ c'est bien le classement (Collation) qui est en cause. chaque colonne de type caractère à un classement de défini (explicitement, ou classement par défaut de la base de données, ou à défaut du serveur)
    que vous renvoie cette requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT name, collation_name
    FROM sys.databases

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

Discussions similaires

  1. Requête sur une vue et temps de réponse
    Par shaun_the_sheep dans le forum SQL
    Réponses: 47
    Dernier message: 20/02/2012, 13h21
  2. Requête sur une vue indexée
    Par VladTepes dans le forum Développement
    Réponses: 0
    Dernier message: 10/08/2010, 17h37
  3. [WD15] Requête sur une vue.
    Par thierrybatlle dans le forum WinDev
    Réponses: 19
    Dernier message: 03/06/2010, 09h14
  4. Problème de requête sur une vue Hibernate
    Par littlebear dans le forum Hibernate
    Réponses: 16
    Dernier message: 05/01/2009, 14h48
  5. Requête sur une base access dans excel
    Par adrien.gendre dans le forum Excel
    Réponses: 3
    Dernier message: 23/07/2007, 12h06

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