2017-05-22 12 views
0

私のストアドプロシージャでは、サイズが1GBを超える非常に大きな可能性のあるXMLファイルを作成しています。データをvarbinary列に挿入する必要があり、これを行う最も効率的な方法がSQL Server 2014にあるのだろうか?SQL Server 2014 - xmlデータをvarbinaryフィールドに挿入

+0

XMLの場合は、なぜそれを 'XML'データ型として保存していませんか? 'XML'型のカラムも最大2GBのサイズをサポートし、' varchar(max) 'カラムよりも効率的にXMLを保存します –

+0

xmlカラムに格納していましたが、この新しいカラムに移動するように求めました私のコントロール外の決定の結果。 – user1698316

+0

私の答えに加えて、 'CAST(YourXML AS VARBINARY(MAX))よりも速いものは何でしょうか? – Shnugo

答えて

0

私はXML列に格納されたが、これに移動するように要求されています私のコントロール外の決定の結果として新しい列

これらの人と話す機会が少しあれば、これを行う必要があります!

XMLは、表示される文字列表現としてではなく、階層的に構成されたツリーとして格納されることに注意する必要があります。このデータを読み込んだり操作したりするのは驚くほど高速です! XMLをBLOBとして保存する場合は、文字列形式にしておきます(できればこれはunicode/UCS-2です)。このデータを読むには、NVARCHAR(MAX)へのキャストとXMLへのキャストが必要です。これは、ドキュメント全体を完全に解析して階層ツリーを取得することを意味します。これが完了したら.valueまたは.nodesのようなXMLデータ型メソッドを使用できます。この非常に高価なプロセスが何度も何度も必要となります。

特に巨大なXMLの場合(またはさらに悪い - それらの多く)これは本当に悪い決定です!なぜこれを行う必要がありますか?おおよそ同じ量のストレージスペースが必要です。
パフォーマンスが悪いだけです。あなたはこれを後で修理しなければならない人になります...

VARBINARYは、内部のもの(写真など)を気にしないデータに適したタイプです。これらのXMLが単純なアーカイブデータであり、そのXMLを読み込みまたは操作したくない場合は、これが選択肢になります。しかし、の利点は全くありません!

+0

私はあなたの回答に同意しますが、私はバトルを失い、varbinaryとして保存する必要がありました。 – user1698316

0

私は、ファイルテーブルを使用してになります。https://docs.microsoft.com/en-us/sql/relational-databases/blob/filetables-sql-server

とブロブを挿入するためにこれをチェックアウト:How to insert a blob into a database using sql server management studio

+0

残念ながら、私はファイルテーブルを使用するオプションがありません。 – user1698316

+0

いつもOPENROWSETにファイルが必要だと考えました。それを使用するように見えます。ありがとうございます – user1698316

+0

あなたは何を書いているストアドプロシージャを呼び出すでしょうか? – Ben

関連する問題