2010-08-05 29 views
2

我從一個傳統的MySQL數據庫將數據導入SQL Server 2005中SQL服務器 - 試圖列轉換爲XML失敗

的過程是我有一個特別的表是造成我的悲傷。我從MySQL使用鏈接的服務器和MySQL ODBC驅動程序導入後,我結束了與此:

Col Name   Datatype MaxLen 
OrderItem_ID  bigint  8 
PDM_Structure_ID int   4 
LastModifiedDate datetime 8 
LastModifiedUser varchar 20 
CreationDate  datetime 8 
CreationUser  varchar 20 
XMLData   text  -1 
OrderHeader_ID  bigint  8 
Contract_Action varchar 10 
ContractItem  int   4 

我的主要重點是在XMLData柱 - 我需要把它清理乾淨,並使其如此我可以將其轉換爲XML數據類型以在其上使用XQuery。

所以我的表選項「大數據排出來的」設置爲1:

EXEC sp_tableoption 'OrderItem', 'large value types out of row', 1 

,然後我繼續前進,轉換XMLDataVARCHAR(MAX)做存儲在該領域的XML的一些清理工作。迄今爲止都很好。

但是當我現在嘗試在列XML數據類型轉換:

ALTER TABLE dbo.OrderItem 
    ALTER COLUMN XMLData XML 

我得到這個訊息:

消息511,級別16,狀態1,行
無法創建一個大小爲8077的行,其中 大於允許的最大值 行大小爲8060.該語句有 已終止。

這是相當令人驚訝,看到除了XMLData列只佔大約90個字節,我專門指示SQL Server來存儲所有的「大數據」行外....

所以爲什麼SQL Server拒絕將該列轉換爲XML數據?有任何想法嗎??思考?我可以檢查/改變我的方法?

更新:我不知道發生了什麼變化,但在第二次嘗試從MySQL導入原始數據轉換成SQL Server中,我能成功到NTEXT轉換 - > VARCHAR(MAX)列在XML結束.....奇怪..... anyhoo - 現在作品 - 謝謝你們所有的輸入和建議!高度讚賞!

+0

你有樣品代碼來複制這個嗎? – 2010-08-05 21:06:13

+0

@Ed Harper:我可以給你我的代碼片段,但棘手的部分是:該代碼在三個表上工作得很好,並且只在該問題的一個表上失敗.... – 2010-08-06 05:01:12

回答

1

如果你有足夠的存儲空間,你可以嘗試從VARCHAR(MAX)版本表中選擇到一個新表具有相同的架構,但與XMLDATA設置爲XML - 無論是使用SELECT INTO或在開始之前明確創建表。

PS - 這是一個與您的問題無關的問題,但您可能希望通過此轉換檢查您是否在原始MySQL XMLData字段中丟失了Unicode字符,因爲文本/ varchar數據類型不支持它們。

+0

我試過 - 只提取ID和XML - 工作。但是,我無法將它恢復到原始表格(再次出現同樣的錯誤) – 2010-08-05 13:12:23

+0

@marc_s - 您能否成功地將整個表格複製到新表格中,包括轉換?如果是這樣,你可以放棄原來的。 – 2010-08-06 08:47:59

1

你能添加一個新的xml類型的列嗎?

如果是這樣,請添加新的xml列,更新表以將新列設置爲等於XmlData列,然後刪除XmlData列。

編輯
我有一個表 「TestTable的」 用 「爲nvarchar(最大)」 一欄。

select * from sys.tables where name = 'TestTable' 

這使得含有結果:

[lob_data_space_id] [text_in_row_limit] [large_value_types_out_of_row] 
1     0     0 

但我可以高興地節省50萬個字,我爲nvarchar(最大)字段。

如果您查詢您的OrderItems表sys.tables,你會得到什麼?

如果你的[text_in_row_limit]不爲零,試試這個,這應該任何現有的行內字符串轉換成的BLOB:

exec sp_tableoption 'OrderItems', 'text in row', 0 

,然後嘗試從爲nvarchar(最大)到XML轉換。

從BOL,

禁用行選項的文本或 減少將 要求所有的BLOB的轉換選項的限制;因此,該過程可能很長,取決於必須轉換的BLOB 字符串的數量。 表在轉換 過程中被鎖定。

+0

我可以添加一個,是的 - 但最後我遇到了同樣的錯誤..... – 2010-08-05 13:11:48