На SQL Server 2012 с пакетом обновления 2 (SP2) я использую OPENQUERY
для Oracle 9/10/11. В общем, я имел дело с целыми числами, теперь у нас есть OPENQUERY
, которые адресуют плавающие числа. Значения хранятся в столбцах с типом данных number()
. В SQL Servre значимые цифры будут усечены. В SQL Server эти столбцы обрабатываются как NUMERIC(38,0)
.SQL Server: Openquery to Oracle: тип данных для числа/числового
Могу ли я изменить эту обработку данных в настройках базы данных или связанного сервера? Или лучше всего избегать этих неправильных толкований, обычно конвертируя числа в символы перед переходом с Oracle на SQL Server?
Пример создать таблицу в Oracle:
CREATE TABLE oratab
(
num_col1 number , num_col2 number(10, 5) ,
flo_col1 FLOAT , flo_col2 FLOAT(5)
);
INSERT INTO oratab (num_col1, num_col2, flo_col1, flo_col2)
VALUES (3.1415, 3.1415, 3.1415, 3.1415);
SELECT
num_col1, num_col2, num_col3, flo_col1, flo_col2
FROM oratab;
Как и ожидалось, результат является:
NUM_COL1 | NUM_COL2 | FLO_COL1 | FLO_COL2
------------------------------------------
3.1415 | 3.1415 | 3.1415 | 3.142
Когда я делаю отборное на эту таблицу из SQL Server
SELECT
num_col1, num_col2, flo_col1, flo_col2
FROM
OPENQUERY (ORADB, 'SELECT num_col1, num_col2, flo_col1, flo_col2 FROM oratab')
Я получаю следующий результат:
NUM_COL1 | NUM_COL2 | FLO_COL1 | FLO_COL2
------------------------------------------
3 | 3,14150 | 3.1415 | 3.142
Когда я преобразовать числовые данные в обугливаюсь я получить ожидаемый результат
SELECT num_col1
FROM OPENQUERY (ORADB, 'SELECT to_char(num_col1) FROM oratab')
Когда я бег избранного в от этого OPENQUERY
, SQL Server создает столбец num_col1
с типом NUMERIC(38,0)
данных.