1

我正在尝试通过链接服务器在 SQL Server 2008 脚本的 Oracle 11g 表中插入带有 TIMESTAMP(6) 列的行。

这是我到目前为止所尝试的:

INSERT INTO LinkedServer..Schema.Table(TimeStampColumn) 
VALUES(CONVERT(DATE, '2013-08-07'));

INSERT INTO LinkedServer..Schema.Table(TimeStampColumn) 
VALUES(CONVERT(DATETIME, '2013-08-07 12:12:12.000001'));

INSERT INTO LinkedServer..Schema.Table(TimeStampColumn) 
VALUES(CONVERT(TIMESTAMP, '2013-08-07 12:12:12.000001'));

和许多组合,每次我收到此错误时:

链接服务器“LinkedServer”的 OLE DB 提供程序“OraOLEDB.Oracle”为列“TimeStampColumn”提供了无效的元数据。不支持数据类型。

这可能吗?

如何将 SQL Server 的varchardatetime值转换为 Oracletimestamp(6)数据类型?

非常感谢!

4

1 回答 1

3

好吧,我找到了:

EXECUTE ('begin INSERT INTO TEST_TIMESTAMP(TimeStampColumn)
      VALUES (TO_TIMESTAMP(?,''YYYY-MM-DD HH24:MI:SS.FF6'')); end;', 
      '2013-12-06 11:12:13.123456') 
     AT LINKEDSERVER;

'timestampcolumn' 是 TIMESTAMP(6) 类型的列

调用 oracle 函数的方法相同:Calling an Oracle function from SQL Server Linked Server

它也适用于变量

declare @date datetime2
set @date = SYSDATETIME()
EXECUTE ('begin INSERT INTO TEST_TIMESTAMP(TimeStampColumn)
      VALUES (?); end;', 
      @date) 
     AT LINKEDSERVER;

但在这种情况下,Oracle 将其截断为秒

于 2013-07-09T08:40:20.307 回答