質問

たまたま読んだ SQL Server 2008の最大容量仕様 最大8060バイが見られました 行ごと?何が... 1列あたりわずか8kbが許可されていますか? (はい、「row-overflowストレージ」の特別な取り扱いを見ました、私は標準的な行動について話しています)

ここで何かを誤解しましたか? SQL Serverデータベース内に保存されているいくつかのMBサイズのバイナリオブジェクトを見たと確信しているからです。これは不吉です 行ごと 1つの行、複数の列のように、本当にテーブルの列を意味しますか?

だから私が3つ持っているとき nvarchar そこに4000文字のそれぞれがある列(テキストボックスに記載されている3つの法的文書を想定してください...) - サーバーは警告を吐き出しますか?

役に立ちましたか?

解決

はい、作成テーブルの作成、挿入または更新のエラーに関する警告が表示されます

LOBタイプ(NvarChar(MAX)、VARCHAR(MAX)、VARBINARY(MAX)は2GB-1バイトを許可します。これは、大量のデータを保存する方法であり、以前に見たものです。

  • 単一のフィールド> 4000文字/8000バイトの場合、私はnvarchar(最大)を使用します

  • 1つの行で3 x nvarchar(4000)の場合、私は次のとおりです。

    • 私のデザインは間違っています
    • 1つ以上の列のnvarchar(max)
    • 「最も人口の少ない」列の1:1の子テーブル

他のヒント

2008年にはオーバーフローが処理されますが、2000年には、オーバーフロー化されたレコードを挿入することを単に拒否します。ただし、かなりの数のレコードがオーバーフローされているため、クエリにいくつかのパフォーマンスの問題を引き起こす可能性があるため、これを念頭に置いて設計することが最善です。説明した場合、ドキュメントタイプの列を備えた関連テーブル、ドキュメント用の大きなフィールド、およびIntialテーブルの外部キーを検討することができます。ただし、3つの列すべてが同じレコードまたは最大値で満たされるのが違う場合、デザインは問題ないかもしれません。どちらが最適かを判断するには、データを知る必要があります。もう1つの考慮事項は、問題が発生するまで現在のように継続してから、別のドキュメントテーブルに置き換えることです。既存のテーブルの名前を変更して新しいテーブルを作成してから、新しい構造からデータをプルする既存のタブネームでビューを作成することで、リファクタリングすることもできます。これにより、挿入ステートメントまたは更新ステートメントを調整する必要がありますが、多くのコードが壊れないようにする可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top