2012-09-07 107 views
2

我通過SSIS將Excel文件導入到SQL-Server。我有一個臨時表來獲取nvarchar中的所有內容。對於四列,我將字符串轉換爲金錢類型並放入我的目標表中。SQL Server數據類型逗號分隔符

在我的臨時表中,這四列中的一列讓我稱它X爲逗號作爲分隔符,其餘爲點。不要問我爲什麼,我的SSIS中的所有東西都是一樣的。 在我的Excel中,分隔符也是逗號。

所以現在我的目標表我把一切都在逗號值但X列現在移動逗號兩塊地的權利,看起來像這樣:

537013,00,而不是5370,13這是temp和excel列中的原始單元格值。

我在想這是一個文化設置問題,但它又應該或不應該在所有這些列上工作。

a)當我的Excel顯示逗號時,爲什麼我的臨時表中接收點值?

b)我該如何解決這個問題?我可以使用點替換臨時表中的「,」嗎?

UPDATE

我想我找到了原因,但不是解決辦法:

在Excel這個X列中的前三個單元格是空的 - 其他三列的所有從0開始,如果我用0填充X的這三個單元格,然後我也得到我的臨時表中的點和我的目標表中的正確值。但是,我必須按照原樣使用Excel文件。 有關於此的任何想法?

回答

0

請嘗試下面的代碼。它檢查被轉換爲貨幣的字符串值是否是數字數據類型。如果字符串值是數字數據類型,則將其轉換爲貨幣數據類型,否則返回NULL值。它還替換了字符串值的小數點符號和數字分組符號以匹配SQL Server的預期小數點符號和數字分組符號。

DECLARE @MoneyString VARCHAR(20) 
SET @MoneyString = '$ 1.000,00' 
SET @MoneyString = REPLACE(REPLACE(@MoneyString, '.', ''), ',', '.') 
SELECT CAST(CASE WHEN ISNUMERIC(@MoneyString) = 1 
       THEN @MoneyString 
       ELSE NULL END AS MONEY) 

至於你爲什麼得到逗號的原因點我沒有任何線索。我的第一個猜測是文化背景,但你已經檢查過了。關於谷歌搜索,你有什麼結果?

0

首先SQL中的「分隔符」是小數點:它唯一使用逗號的excel。您可以在Excel中更改格式:您應該將excel列格式化爲金錢並指定小數點作爲分隔符。然後在SSIS導入嚮導中拆分列的轉換,以便導入到貨幣數據類型。它是一種文化的事情,但分隔符趨於標誌着一列的結束和下一個開始(如CSV)

HTH

+0

有一個原因,我不能使用任何東西,但nvarchar,因爲這些數字列可能都在Excel中爲空或甚至可以包含文本(用戶錯位) – TonyC

0

那麼這就是與Excel中的一個長期存在的問題的情況下使用。它使用前30行左右來推斷數據類型。它可能導致無盡的問題。我認爲你的解決方案必須是按雅羅斯拉夫所建議的方式將所有東西都作爲一個字符串處理,或者提供一個excel模板來獲得數據預定義和格式化的數據類型列,然後插入值。它是一個皮塔餅。