通过链接服务器连接时,如何将Oracle TIMESTAMP数据类型转换为SQL Server DATETIME2数据类型?

Asy*_*ous 4 sql-server oracle

我已经尝试了一些示例,但到目前为止没有用。我有Link Server (SQL Server 2014)一个Oracle 12C Database

该表包含数据类型为TIMESTAMP的数据,如下所示:

22-MAR-15 04.18.24.144789000 PM
Run Code Online (Sandbox Code Playgroud)

尝试通过链接服务器在SQL Server 2014中查询此表时,使用此代码出现以下错误:

SELECT CAST(OracleTimeStampColumn AS DATETIME2(7)) FROM linkServerTable
Run Code Online (Sandbox Code Playgroud)

错误:

消息7354,级别16,状态1,第8行
链接服务器“ MyLinkServer”的OLE DB提供程序“ OraOLEDB.Oracle”为列“ MyDateColumn”提供了无效的元数据。不支持数据类型。

虽然错误是不言自明的,但我不确定如何解决此问题。

我需要将转换timestampdatetime2。这可能吗?

小智 5

您可以通过使用解决此问题OPENQUERY。对我而言,通过链接服务器从SQL 2008连接到Oracle 12,此查询失败:

SELECT TOP 10 TimestampField
FROM ORACLE..Schema.TableName
Run Code Online (Sandbox Code Playgroud)

...出现此错误:

The OLE DB provider "OraOLEDB.Oracle" for linked server "ORACLE" supplied invalid metadata for column "TimestampField". The data type is not supported.
Run Code Online (Sandbox Code Playgroud)

即使我不包含有问题的列(类型为TIMESTAMP(6)。明确地将其强制转换为DATETIME也无济于事),也会发生这种情况。

但是,这可行:

SELECT * FROM OPENQUERY(ORACLE, 'SELECT "TimestampField" FROM SchemaName.TableName WHERE ROWNUM <= 10')
Run Code Online (Sandbox Code Playgroud)

...并且返回的数据很好地流入了一个DATETIME2()字段。