300を超える列を持つテーブルを持つサードパーティのデータベースがあり、SQL Server 2012では、許容される最大の8060バイトを超えているというエラーが発生しています。 SQL Server 2016へのアップグレードが役立つかどうか疑問に思っていました。
SQL Server 2016にも8060バイトの制限がありますか?以下のエラーが発生することなく、SQL Server 2016で列を増やすことはできますか?
エラー:テーブル "X"が作成されましたが、その最大行サイズは許可されている最大の8060バイトを超えています。結果の行がサイズ制限を超えると、このテーブルへのINSERTまたはUPDATEは失敗します。
この制限はSQL Serverのコア物理ページ構造に依存しており、SQL Server 2016では変更されていません(SQL Server 2017でも変更されていません)。
ただし、これを回避する方法はいくつかあります。気になるのは、いくつかの大きなデータを別のテーブルに分割することです。または、データが同じ行のすべての列を埋めないことがわかっている場合(またはそれを防ぐことができる場合)は、警告メッセージを表示することもできます。
または、サードパーティに戻って、なぜこれがあり、実際の行の問題をどのように防ぐのかを確認します。
これは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ユーザー定義型の列が作成および変更されたとき、およびデータが更新または挿入されたときに適用されます。
上記の説明を改善することはできませんが、正規化を検討することをお勧めします。多くの形式がありますが、適切に正規化されたデータベース設計では、この行の制限に達することはほとんどありません。
このトピックについては多くの読み物がありますが、これは良い紹介です...