我尝试了一些例子但到目前为止还没有工作。
我有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
。这可能吗?
答案 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**