2017-09-05 4 views
0

Dans TSQL, j'utilise une requête directe pour sélectionner toutes les données d'une base de données Oracle. C'est une déclaration simple et ça fonctionne bien. Cependant, j'ai réalisé que je devais mettre quelques TRIM dans la requête de transmission.Analyse des valeurs dans les requêtes directes

, je suis passé de ceci:

Select *

à ceci:

Select TRIM(col1), col2

Maintenant, je ne peux pas référencer les colonnes de la transmission. Il semble que Select * vous permette de faire référence aux colonnes par leurs noms dans Oracle, mais une fois que les colonnes sont explicitement listées (comme col2), j'obtiens une erreur de nom de colonne Invalide.

Voici le code simplifié en question. Il indique que toute référence de SOURCE.col1 ou SOURCE.col2 sont des noms de colonne non valides. (Il est OK si je fais Sélectionnez * dans le pass-through bien.)

MERGE dbo.SqlServerTable AS TARGET 
USING (
    SELECT * FROM OPENQUERY(ORA_REP, ' 
     SELECT 
      TRIM(col1), 
      col2 
     FROM OracleTable 
     ' 
    ) 
) AS SOURCE 
ON (TARGET.Foo = SOURCE.col1) 
WHEN MATCHED THEN 
    UPDATE SET 
     TARGET.Bar = SOURCE.col2 
WHEN NOT MATCHED THEN 
    INSERT (
     Foo, 
     Bar 
    ) 
    VALUES (
     SOURCE.col1, 
     SOURCE.col2 
    ) 
; 
+4

Ajouter des alias pour les valeurs parées ? – HABO

+0

Dans la traversée? – user7733611

+0

Ce serait l'endroit pour le faire, si c'est supporté. – HABO

Répondre

0

Vous devriez être en mesure d'un alias les colonnes parées aux mêmes noms:

MERGE dbo.SqlServerTable AS TARGET 
USING (
    SELECT * FROM OPENQUERY(ORA_REP, ' 
     SELECT 
      TRIM(col1) col1, 
      TRIM(col2) col2 
     FROM OracleTable 
     ' 
    ) 
) AS SOURCE 
ON (TARGET.Foo = SOURCE.col1) 
WHEN MATCHED THEN 
    UPDATE SET 
     TARGET.Bar = SOURCE.col2 
WHEN NOT MATCHED THEN 
    INSERT (
     Foo, 
     Bar 
    ) 
    VALUES (
     SOURCE.col1, 
     SOURCE.col2 
    ) 
; 
+2

'col1 = TRIM (col1)' est un code SQL non valide (standard) et ne fonctionnera pas dans Oracle. –

+0

Oui, essayé et ça n'a pas marché. – user7733611

+2

@russ: TRIM (col1) col1, TRIM (col2) col2 – EoinS