2017-09-05 1 views
0

In TSQL verwende ich eine Pass-Through-Abfrage, um alle Daten aus einer Oracle-Datenbank auszuwählen. Es ist eine einfache Aussage und es funktioniert gut. Ich erkannte jedoch, dass ich einige TRIMs in die Pass-Through-Abfrage einfügen muss.Analysieren von Werten in Pass-Through-Abfrage

Also ging ich von dieser:

Select *

dazu:

Select TRIM(col1), col2

Jetzt kann ich die Spalten in der Passthrough nicht verweisen. Es scheint, als ob Select * Ihnen erlaubt, auf die Spalten nach ihren Namen in Oracle zu verweisen, aber sobald die Spalten explizit aufgelistet sind (wie zB col2), erhalte ich einen ungültigen Spaltennamenfehler.

Hier ist der vereinfachte Code in Frage. Es besagt, dass jede Referenz von SOURCE.col1 oder SOURCE.col2 ungültige Spaltennamen sind. (Es ist in Ordnung, wenn ich aber eine Select * im Pass-Through tun.)

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

Aliase hinzufügen für die beschnittenen Werte ? – HABO

+0

Innerhalb des Pass-Through? – user7733611

+0

Das wäre der Ort, um es zu tun, wenn es unterstützt wird. – HABO

Antwort

0

Sie sollten in der Lage sein, die beschnitten Spalten die gleichen Namen an Alias:

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)' ist ungültig (Standard) SQL und wird in Oracle nicht funktionieren. –

+0

Ja, habe es ausprobiert und es hat nicht funktioniert. – user7733611

+2

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

Verwandte Themen