標籤:
當使用SQL Server 2012的DTS嚮導(Import and Export Data/匯入匯出資料)時,會出現如下問題:
當來來源資料直接使用表的時候,沒有任何問題
但如果來來源資料是查詢時,就會出現欄位被映射為200(varchar)和202(nvarchar)
據說微軟已經解決了這個Bug:https://connect.microsoft.com/SQLServer/feedback/details/772761/dtswizard-in-sql-2012-sp1-no-longer-recognizes-nvarchar-varchar-data-types-when-source-is-a-query
但事實上我打了補丁還是會報錯。
有一個比價方便的Workaround:
開啟DTS的對應檔(對於64位嚮導是C:\Program Files\Microsoft SQL Server\110\DTS\MappingFiles\MSSQLToSSIS10.XML,對於32位嚮導是C:\Program Files (x86)\Microsoft SQL Server\110\DTS\MappingFiles\MSSQLToSSIS10.XML)
編輯如下節點:
<!-- varchar --><dtm:DataTypeMapping ><dtm:SourceDataType><dtm:DataTypeName>varchar</dtm:DataTypeName></dtm:SourceDataType><dtm:DestinationDataType><dtm:CharacterStringType><dtm:DataTypeName>DT_STR</dtm:DataTypeName><dtm:UseSourceLength/></dtm:CharacterStringType></dtm:DestinationDataType></dtm:DataTypeMapping><dtm:DataTypeMapping ><dtm:SourceDataType><dtm:DataTypeName>200</dtm:DataTypeName></dtm:SourceDataType><dtm:DestinationDataType><dtm:CharacterStringType><dtm:DataTypeName>DT_STR</dtm:DataTypeName><dtm:UseSourceLength/></dtm:CharacterStringType></dtm:DestinationDataType></dtm:DataTypeMapping>
以及
<!-- nvarchar --><dtm:DataTypeMapping ><dtm:SourceDataType><dtm:DataTypeName>nvarchar</dtm:DataTypeName></dtm:SourceDataType><dtm:DestinationDataType><dtm:CharacterStringType><dtm:DataTypeName>DT_WSTR</dtm:DataTypeName><dtm:UseSourceLength/></dtm:CharacterStringType></dtm:DestinationDataType></dtm:DataTypeMapping><dtm:DataTypeMapping ><dtm:SourceDataType><dtm:DataTypeName>202</dtm:DataTypeName></dtm:SourceDataType><dtm:DestinationDataType><dtm:CharacterStringType><dtm:DataTypeName>DT_WSTR</dtm:DataTypeName><dtm:UseSourceLength/></dtm:CharacterStringType></dtm:DestinationDataType></dtm:DataTypeMapping>
然後儲存。這樣就可以讓DTS在判斷到200和202的時候也正常轉換。
感謝這篇中的解答貢獻者:
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/97ff1f01-c02a-4c9a-b867-8eaecc464cfb/2012-sp1-no-longer-recognizes-common-data-types
SQL Server DTS嚮導,欄位轉換出現202和200錯誤