web-dev-qa-db-ja.com

SQL Server 2016の最大バイト数/行

300を超える列を持つテーブルを持つサードパーティのデータベースがあり、SQL Server 2012では、許容される最大の8060バイトを超えているというエラーが発生しています。 SQL Server 2016へのアップグレードが役立つかどうか疑問に思っていました。

SQL Server 2016にも8060バイトの制限がありますか?以下のエラーが発生することなく、SQL Server 2016で列を増やすことはできますか?

エラー:テーブル "X"が作成されましたが、その最大行サイズは許可されている最大の8060バイトを超えています。結果の行がサイズ制限を超えると、このテーブルへのINSERTまたはUPDATEは失敗します。

5
Nancy

この制限はSQL Serverのコア物理ページ構造に依存しており、SQL Server 2016では変更されていません(SQL Server 2017でも変更されていません)。

ただし、これを回避する方法はいくつかあります。気になるのは、いくつかの大きなデータを別のテーブルに分割することです。または、データが同じ行のすべての列を埋めないことがわかっている場合(またはそれを防ぐことができる場合)は、警告メッセージを表示することもできます。

または、サードパーティに戻って、なぜこれがあり、実際の行の問題をどのように防ぐのかを確認します。

12
Aaron Bertrand

これはSQL Serverの動作方法であり、SQL Serverのすべてのバージョンでページ制限が8KBであるため、パフォーマンスを向上させるには制限があります。

役立つmsdnの何かを貼り付けます:

https://msdn.Microsoft.com/en-us/library/ms186981(v = sql.105).aspx

8 KBを超える行オーバーフローデータ

テーブルには、1行あたり最大8,060バイトを含めることができます。 SQL Server 2008では、この制限は、varchar、nvarchar、varbinary、sql_variant、またはCLRユーザー定義型の列を含むテーブルに対して緩和されています。これらの各列の長さは、8,000バイトの制限内に収まる必要があります。ただし、それらを組み合わせた幅は8,060バイトの制限を超える可能性があります。これは、varchar、nvarchar、varbinary、sql_variant、またはCLRユーザー定義型の列が作成および変更されたとき、およびデータが更新または挿入されたときに適用されます。

5

上記の説明を改善することはできませんが、正規化を検討することをお勧めします。多くの形式がありますが、適切に正規化されたデータベース設計では、この行の制限に達することはほとんどありません。

このトピックについては多くの読み物がありますが、これは良い紹介です...

正規化記事

0
Ollie