0

とてつもなく長い xml 行があり、800000 文字を超えています。「クライアント」は「サーバー」でもあります。OSはwindows2k8x64です。データベースには、クライアントと同様に十分なメモリがあります。

問題は、魔法の数の文字数 (正確に 43679 xml 文字) に達すると、行が '' と思われるものを返すことです。長さを計算するときに、SQLサーバーによって空白が明らかに取り除かれるため、それらを「xml文字」と呼びます-これは、このSQLで行います: len(convert(varchar(max), xsl)) 数値が43679である理由も私を困惑させます...

この問題を抱えている人はいますか?私は実際にWindows 2k3と別のWindows 2k8サーバーを備えた同じサーバーに接続しましたが、これ以外のマシン(実際のサーバー自体)には問題はありません。

また、クエリの結果 -> sql server -> グリッドへの結果を見つけ、xml の制限を「無制限」に設定しましたが、まだ「機能」していないようです... (機能するものでは、これが 2mb に設定されていますご参考までに)

すべてのコメントに感謝します - 私は何でも試してみます...それは何も動作を妨げていません - 私はそれがこの1つのクライアントだけだと確信していますが、それは私を夢中にさせています! :)

更新: 参考までに - 問題は変換ではありません - 実際に変換したくありません。この例で convert を使用している唯一の理由は、len を使用することです (len は xml データ型では機能しません)。これにより、xml の「長さ」を知ることができます。

問題はこれです...

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

約100,000行のxmlになるまでそれをコピーして貼り付けて挿入します...次を使用して行を選択すると、次のようになります。

SELECT * FROM someTableForXml

1 行戻ると、「グリッド」に xml の素敵な小さなハイパーリンクが表示されます。これをクリックすると、新しいタブに「完全な xml」が表示されます。しかし、私にとっては...この奇妙な魔法の数字を渡すと、それが停止し、単に空白に見えます.

4

2 に答える 2

0

<?xml version="1.0" encoding="UTF-16"?>XMLの先頭にがないためだと思います。

于 2009-01-23T20:06:26.500 に答える
0

あなたには2つの別々の問題があると思います:

  1. SSMS の動作
  2. xml 変換

SSMS の動作

bcp を試してファイルにダンプし、結果を確認してください。このようにして SSMS をバイパスしますが、これは奇妙です。

または、SSMS がそれを LOB データとして扱うように varchar(max) に変換します (ただし、次の情報を参照してください)。

xml conversion 43679 はおそらく varchar(max) への変換が原因です。CAST AND CONVERTおよび XML の CONVERT のスタイル パラメータを参照してください。デフォルトのスタイルは「重要でない空白を破棄する」ため、上記のスタイルはありません。

SSMS は正しい CONVERT を持つ列に基づいて非 LOB データの最大長 (65535) を適用していると思いますが、空白なしで表示しています。したがって、不一致。

于 2009-01-08T05:56:01.860 に答える