解析传递查询中的值
在TSQL中,我使用传递查询从Oracle数据库中选择所有数据。这是一个简单的声明,它工作正常。但是,我意识到我需要在传递查询中添加一些TRIM。解析传递查询中的值
所以,我从这个去:
Select *
这样:
Select TRIM(col1), col2
现在,我不能引用在直通的列。看起来像Select *允许你在Oracle中通过他们的名字来引用列,但是一旦列被明确列出(如col2),我会得到一个无效的列名错误。
这里是有问题的简化代码。它说SOURCE.col1
或SOURCE.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
)
;
你应该能够别名修剪列相同的名字:
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
)
;
'col1 = TRIM(col1)'是无效的(标准)SQL,不适用于Oracle。 –
是的,试了一下,它没有工作。 – user7733611
@russ:TRIM(col1)col1,TRIM(col2)col2 – EoinS
添加别名修剪值? – HABO
在传递? – user7733611
如果支持的话,那就是做这件事的地方。 – HABO