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" に無効なメタデータを提供しました。データ型はサポートされていません。

これは可能ですか?

varcharSQL Server のまたはdatetime値を 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 に答える