如何使用 LinkedServer 以 TimeStamp(6) 格式从 SQL 服务器插入日期到 Oracle

How to insert date from SQL Server by using LinkedServer to Oracle in TimeStamp(6) format

我有一些记录要使用 LinkedServer 从 SQL 服务器迁移到 Oracle 服务器。

SQL服务器中的日期:2014-12-31 11:16:39.000

日期应转换为 Oracle 的这种格式:timestamp(6)

对于这个操作,我尝试了一些脚本。这些脚本在 Oracle 迁移的插入脚本之外成功运行。但是这些的任何结果都与 Oracle 日期类型无关。

执行的脚本:

CONVERT(varchar(24), BEGIN_DATETIME, 121) AS BEGIN_DATE` 

尝试了 20、21、120

CURRENT_TIMESTAMP AS BEGIN_DATE

CAST(BEGIN_DATETIME as timestamp)

TO_TIMESTAMP(BEGIN_DATE, 'YYYY-MM-DD HH24:MI:SS')

returns to_timestamp' 不是可识别的内置函数名称

并且脚本 return 出错:

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

我在迁移时没有格式化或更改 SQL 服务器中的日期值就解决了我的问题。我尝试了不同类型的 LinkedServer 脚本。


LinkedServer 的脚本类型 1

INSERT INTO 
    [LNK_DEV]..[TEST].[DIAG_TABLE]
SELECT
    [BEGIN_DATE] = CONVERT(varchar(24), BEGIN_DATE, 121) AS BEGIN_DATE
FROM 
    TEST.DIAG_TABLE_SQLSERVER

此脚本 returns 错误: 链接服务器的 OLE DB 提供程序 "OraOLEDB.Oracle" "LNK_DEV" 提供的元数据无效列 "BEGIN_DATE"。数据类型不受支持。


LinkedServer 的脚本类型 2

INSERT INTO
    OPENQUERY([LNK_DEV], 'SELECT BEGIN_DATE FROM TEST.DIAG_TABLE') 
SELECT 
    BEGIN_DATE
FROM 
    TEST.DIAG_TABLE_SQLSERVER

此查询已成功完成,记录已正确移动到 Oracle 服务器。