我已经尝试了一些示例,但到目前为止没有用。我有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”提供了无效的元数据。不支持数据类型。
虽然错误是不言自明的,但我不确定如何解决此问题。
我需要将转换timestamp为datetime2。这可能吗?
小智 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()字段。