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

时间:2015-03-22 21:37:33

标签: sql-server oracle

我尝试了一些例子但到目前为止还没有工作。 我有Link Server (SQL Server 2014)Oracle 12C Database

该表包含数据类型TIMESTAMP,其数据如下:

22-MAR-15 04.18.24.144789000 PM

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

SELECT CAST(OracleTimeStampColumn AS DATETIME2(7)) FROM linkServerTable

错误:

  

Msg 7354,Level 16,State 1,Line 8
  链接服务器“MyLinkServer”的OLE DB提供程序“OraOLEDB.Oracle”为列“MyDateColumn”提供了无效的元数据。不支持数据类型。

虽然错误是自我解释的,但我不确定如何解决这个问题。

我需要将timestamp转换为datetime2。这可能吗?

2 个答案:

答案 0 :(得分:4)

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

SELECT TOP 10 TimestampField
FROM ORACLE..Schema.TableName

...有这个错误:

The OLE DB provider "OraOLEDB.Oracle" for linked server "ORACLE" supplied invalid metadata for column "TimestampField". The data type is not supported.

即使我不包含违规列(TIMESTAMP(6)类型,也会出现这种情况。明确地将其强制转换为DATETIME也无效。

然而,这有效:

SELECT * FROM OPENQUERY(ORACLE, 'SELECT "TimestampField" FROM SchemaName.TableName WHERE ROWNUM <= 10')

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

答案 1 :(得分:2)

解决此问题的一种方法是在oracle服务器中创建一个视图,并转换与sql server&#39; s OracleTimeStampColumn数据类型兼容的datetime2。您可以在oracle服务器视图中将时间格式更改为24小时格式,并将该字段标记为varchar。然后,您可以在SQL Server中选择列时将varchar2列转换为datetime2

  

在Oracle Server中

Create or Replace View VW_YourTableName As 
select to_char(OracleTimeStampColumn , 'DD/MM/YYYY HH24:MI:SS.FF')      OracleTimeStampColumn from YourTableName
  

在SQL Server中

SELECT CAST(OracleTimeStampColumn AS DATETIME2(7)) FROM **linkServerVIEW**