2009-01-08 79 views
0

我有一個可笑的長xml行,它有> 800000個字符。 '客戶'也是'服務器'。操作系統是Windows 2k8 x64。數據庫和客戶端一樣擁有充足的內存。從sql server 2005中選擇xml(行顯示爲空)

問題是,一旦我碰到一些神奇的字符數 - 正好是43679 xml字符 - 行返回什麼APPEARS是''。我叫他們'xml字符',因爲任何空白顯然是由sql服務器當它計算長度 - 我用這個sql:len(轉換(varchar(max),xsl))剝離出來爲什麼數字是43679也擋我...

有沒有人有這個問題?實際上,我使用Windows 2k3和另一個Windows 2k8服務器連接到同一臺服務器,並且在除此之外的任何其他計算機(實際服務器本身)上都沒有問題。

我也發現查詢結果 - > sql服務器 - >結果到網格,並將xml的限制設置爲'無限',但它似乎仍然不是'工作'...(那些工作有這個設置爲2mb fyi)

感謝您的任何和所有的意見 - 我會嘗試任何事情...它不能阻止任何工作 - 我敢肯定它只是這一個客戶端,但它讓我瘋狂! :)

更新:僅供參考 - 問題是不與轉換 - 我不'實際上要轉換它。我在這個例子中使用convert的唯一原因是使用len(len不能在xml數據類型上工作),所以我可以找到xml是多長時間。

問題是這樣的......

INSERT INTO someTableForXml(theXml) 
VALUES ('<this><is><some><really>long xml</really></some></is></this>') 

現在,複製和粘貼,直到你有10萬左右的XML的行並將其插入...當我選擇回行使用:

SELECT * FROM someTableForXml 

我得到1行,並在'網格'我得到一個很好的xml超級鏈接,當我點擊它時,顯示在一個新標籤中的「完整的xml」。然而,對於我......一旦我傳遞了這個奇怪的數字,它會停止這樣做,只是看起來空白。

回答

0

你有2個獨立的問題,我認爲:

  1. SSMS行爲
  2. XML comversion

SSMS行爲

嘗試BCP轉儲到一個文件,看看你得到。 這樣你繞過SSMS,它是古怪的。

或轉換爲varchar(最大值),因此SSMS將其視爲LOB數據(但見下資訊)

XML轉換 的43679可能是通過轉換爲varchar(最大值)引起的。 請參閱CAST AND CONVERT以及CONVERT for XML的樣式參數。 默認樣式「丟棄無意義的空白區域」,並且您沒有以上樣式。

我認爲SSMS正在應用非LOB數據的最大長度(65535),該數據基於具有正確CONVERT的列,但顯示時沒有空白。因此,差異。

+0

我很感謝你的時間。謝謝。可悲的是我不認爲它是相關的,儘管如此我更新了更詳細的原始問題。 – dovholuk 2009-01-08 12:26:56

0

我認爲這是因爲您在XML的開頭沒有<?xml version="1.0" encoding="UTF-16"?>