3

レガシー MySQL データベースから SQL Server 2005 にデータをインポートしています。

特に私を悲しませているテーブルが1つあります。リンクサーバーとMySQL ODBCドライバーを使用してMySQLからインポートしましたが、最終的には次のようになりました。

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列です。列をクリーンアップして、XQuery を使用するために XML データ型に変換できるようにする必要があります。

そこで、テーブル オプション「行外の大きなデータ」を 1 に設定します。

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

次に、そのフィールドに格納されている XML に変換XMLDataしてクリーンアップを行います。VARCHAR(MAX)これまでのところすべて順調です。

しかし、その列を XML データ型に変換しようとすると、次のようになります。

ALTER TABLE dbo.OrderItem
   ALTER COLUMN XMLData XML

ここにこのメッセージが表示されます:

メッセージ 511、レベル 16、状態 1、行 1
サイズ 8077 の行を作成できません。行の許容最大サイズ 8060 を超えています。ステートメントは終了しました。

これはかなり驚くべきことですが、列以外の列がXMLData約 90 バイトしかないことを見て、SQL Server にすべての「大きなデータ」を行外に格納するように具体的に指示しました....

では、一体なぜ SQL Server はその列を XML データに変換することを拒否するのでしょうか? 何か案は??想い?? アプローチで確認/変更できること??

更新:何が変わったのかわかりませんが、生データを MySQL から SQL Server にインポートする 2 回目の試みで、最終的にその NTEXT -> VARCHAR(MAX) 列を XML に変換することに成功しました.... . 奇妙な..... anyhoo - 今すぐ動作します - すべての入力と推奨事項に感謝します! 高く評価 !

4

2 に答える 2

1

xml 型の新しい列を追加できますか?

その場合は、新しい xml 列を追加し、テーブルを更新して新しい列を XmlData 列と等しくなるように設定してから、XmlData 列を削除します。

編集
「nvarchar(max)」列を持つテーブル「TestTable」があります。

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

これにより、以下を含む結果が得られます。

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

それでも、nvarchar(max) フィールドに 50 万文字を喜んで保存できます。

OrderItems テーブルに対して sys.tables をクエリすると、何が得られますか?

[text_in_row_limit] がゼロでない場合は、これを試してください。これにより、既存の行内文字列が BLOB に変換されます。

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

次に、nvarchar(max) から xml に切り替えてみてください。

BOLから、

行オプションのテキストを無効にするか、オプションの制限を減らすと、すべての BLOB の変換が必要になります。したがって、変換する必要がある BLOB 文字列の数によっては、プロセスが長くなる可能性があります。変換プロセス中、テーブルはロックされます。

于 2010-08-05T10:56:42.227 に答える
1

十分な記憶領域がある場合は、開始前にテーブルを使用するか明示的に作成することによりVARCHAR(MAX)、テーブルのバージョンから同じスキーマを使用して新しいテーブルを選択して、XMLData を次のように設定してみてください。XMLSELECT INTO

PS - これは問題とは関係のない副次的な問題ですが、text/varchar データ型ではサポートされないため、この変換によって元の MySQL XMLData フィールドの Unicode 文字が失われていないことを確認することをお勧めします。

于 2010-08-05T10:41:21.717 に答える