在SQL Server 2012 SP2上,我使用Oracle 9/10/11的OPENQUERY
。一般來說,我處理整數,現在我們有一些處理浮點數的OPENQUERY
。這些值存儲在數據類型爲number()
的列中。在SQL Servre中,有效數字將被截斷。在SQL Server中,這些列被處理爲NUMERIC(38,0)
。SQL Server:Openquery到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
當我轉換的數值數據爲char我會得到預期的結果
SELECT num_col1
FROM OPENQUERY (ORADB, 'SELECT to_char(num_col1) FROM oratab')
當我運行一個SELECT INTO從這個OPENQUERY
,SQL Server創建的數據類型NUMERIC(38,0)
列num_col1
。