SQL Server 2008: INSERT INTO через связанный сервер в таблицу Oracle 11g со столбцом TIMESTAMP (6)

Я пытаюсь вставить строку со столбцом TIMESTAMP (6) в таблицу Oracle 11g из сценария SQL Server 2008 через связанный сервер.

Вот что я пробовал до сих пор:

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'));

и много комбинаций, каждый раз, когда я получаю эту ошибку:

Поставщик OLE DB «OraOLEDB.Oracle» для связанного сервера «LinkedServer» предоставил недопустимые метаданные для столбца «TimeStampColumn». Тип данных не поддерживается.

Это возможно?

Как преобразовать значение varchar или datetime SQL Server в тип данных Oracle timestamp(6)?

Большое спасибо!


person vladiastudillo    schedule 08.07.2013    source источник
comment
вы пробовали просто передать, например, строку «2013-12-25 12:12:12» (без преобразования)?   -  person sqladmin    schedule 09.07.2013
comment
спасибо @sqladmin .. да, такое же сообщение об ошибке. Ваше предложение работает, если тип данных столбца оракула - Дата.   -  person vladiastudillo    schedule 09.07.2013


Ответы (1)


ну я нашел это:

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 функция из связанного сервера SQL Server

и он также работает с переменной

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

НО в этом случае Oracle обрезает его до секунд

person sqladmin    schedule 09.07.2013