TSQLでは、パススルークエリを使用してOracleデータベースからすべてのデータを選択しています。それは簡単なステートメントで、うまく動作します。しかし、パススルークエリにいくつかのTRIMを配置する必要があることが分かりました。パススルークエリの値の解析
だから、私はこのから行ってきました:これまで
Select *
:
Select TRIM(col1), col2
を今、私はパススルーで列を参照することはできません。 Select *のように、Oracleの名前で列を参照できますが、列が明示的に列挙されると(Col2のように)、無効な列名エラーが発生します。
ここに、問題の単純化されたコードを示します。 SOURCE.col1
またはSOURCE.col2
の参照は、無効な列名です。 (私もパススルーでセレクト*をすればそれはOKです。)
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
)
;
トリミング値のエイリアスを追加します。 ? – HABO
パススルー内ですか? – user7733611
それがサポートされている場合は、それを行う場所になります。 – HABO