在TSQL中,我使用传递查询来从Oracle数据库中选择所有数据。这是一个简单的声明,它工作正常。但是,我意识到我需要在传递查询中加入一些TRIM。
所以,我离开了这个:
Select *
到此:
Select TRIM(col1), col2
现在,我无法引用传递中的列。似乎Select *允许您通过Oracle中的名称引用列,但是一旦明确列出了列(如col2),我就会收到无效的列名错误。
以下是有问题的简化代码。它表示SOURCE.col1
或SOURCE.col2
的任何引用都是无效的列名。 (如果我在传递中执行Select *,则可以。)
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
)
;
答案 0 :(得分: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
)
;