我一直在面對一個問題幾個小時,而且我似乎無法擺脫這個問題。從OPENROWSET(BULK ...)中進行選擇更改特殊字符
所以我有一個SQL Server數據庫2008 R2,排序SQL_Latin1_General_CP1_CI_AS。 裏面有一個表,其中有一個名爲incoming_name的字段。該字段的排序規則也是SQL_Latin1_General_CP1_CI_AS,它是一個NVARCHAR(255)。
我有一個大約123000行的.csv文件。這是一個基本的csv,文本週圍沒有雙引號,但在字段內沒有逗號,所以當我運行手動導入到我的數據庫時,它工作正常。 incoming_name字段包含所有類型的文本,但不能超過255個字符。並在幾行有法國口音(如'Ch * * teau d'Agassac')。
現在我嘗試使用代碼
select
test_file.[INCOMING_NAME] COLLATE SQL_Latin1_General_CP1_CI_AS
as [INCOMING_NAME]
, test_file.[PRODUCT_CODE] AS [PRODUCT_CODE]
FROM
OPENROWSET(
BULK 'INSERT PATH OF THE .CSV HERE',
FORMATFILE = 'INSERT PATH OF THE FORMAT FILE HERE',
FIRSTROW = 2
) AS test_file
隨着格式文件
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR=',' MAX_LENGTH="255" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
<FIELD ID="29" xsi:type="CharTerm" TERMINATOR='\r\n' />
</RECORD>
<ROW>
<COLUMN SOURCE="4" NAME="INCOMING_NAME" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="29" NAME="PRODUCT_CODE" xsi:type="SQLNVARCHAR"/>
</ROW>
的導入工作正常,我也得到我的所有數據,並在正確的價值觀正確的領域,除了口音...
例如,當我添加where test_file.incoming_name like '%agassac%'
在我的查詢結束時,我在我的數據庫中得到類似'Château d'Agassac'的結果而不是原始數據'Châteaud'Agassac'。
我不明白的是,我覺得在這個過程的每一步,我選擇了一個帶有unicode數據類型(NVARCHAR)的區分變音的排序規則,所以我真的不明白爲什麼導入不符合'不要選擇口音。
感謝您閱讀這個長長的問題,
約翰。
編輯:好的,它看起來像我想導入的.csv文件編碼與utf-8,並且SQL Server 2008不想支持utf-8導入。現在我不知道該怎麼做。任何想法的歡迎...
您是否嘗試設置'codepage'? –