2017-09-05 47 views
0

在TSQL中,我使用傳遞查詢從Oracle數據庫中選擇所有數據。這是一個簡單的聲明,它工作正常。但是,我意識到我需要在傳遞查詢中添加一些TRIM。解析傳遞查詢中的值

所以,我從這個去:

Select *

這樣:

Select TRIM(col1), col2

現在,我不能引用在直通的列。看起來像Select *允許你在Oracle中通過他們的名字來引用列,但是一旦列被明確列出(如col2),我會得到一個無效的列名錯誤。

這裏是有問題的簡化代碼。它說SOURCE.col1SOURCE.col2的任何引用都是無效的列名稱。 (這是確定的,如果我在直通做一個選擇*雖然)。

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

添加別名修剪值? – HABO

+0

在傳遞? – user7733611

+0

如果支持的話,那就是做這件事的地方。 – HABO

回答

0

你應該能夠別名修剪列相同的名字:

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)'是無效的(標準)SQL,不適用於Oracle。 –

+0

是的,試了一下,它沒有工作。 – user7733611

+2

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