1000列のテーブルを作成しています。ほとんどの列はnvarchar
タイプです。テーブルは作成されますが、警告があります
警告: テーブル "Test" が作成されましたが、その最大行サイズが許容最大値の 8060 バイトを超えています。結果の行がサイズ制限を超えると、このテーブルへの INSERT または UPDATE は失敗します。
テーブルのほとんどの列には、すでにデータがあります (つまり、列の 99% にデータがあります)。310 番目以降の列を更新しようとすると (309 列から始まるすべての列に何らかの値がある場合)、エラーが発生します。
8060 の許容最大行サイズより大きいサイズ 8061 の行を作成できません。
このデータを最初の 308 列すべてに挿入しています
「Lorem ipsum dolor sit amet, consectetur adipisicing elit.」
データ型を使用してntext
いる場合、約 450 列を更新できますが、それを超えると更新ntext
できません。少なくとも 700 列を更新する必要があります。どの SQL Server がそれを許可していないか。テーブルの一部の列を別のテーブルに移動できないというシナリオがあります。
実際、私は既存のウィンドウアプリケーションに取り組んでいます。これは非常に大きな Windows アプリケーションです。
実際、最大 700 個の nvarchar 列のデータを挿入しようとしているテーブルは、実行時に動的に作成されます。場合によっては、400 ~ 600 列を挿入する必要があります。しかし、一般的には、簡単に処理できる100〜200列が必要です。
問題は、このテーブルを複数のテーブルに分割できないことです。この構造で作成された多くのテーブルとテーブルの名前が別のテーブルに保持されているため、つまり、この構造で 100 以上のテーブルがあり、それらは動的に作成されています。テーブルの作成とそのデータの操作には、4 ~ 5 の言語 (C#、Java など) が使用されており、WCF、Windows サービス、および Web サービスも含まれます。
したがって、テーブルを分割した後にテーブルとそのデータを操作するのは簡単ではないと思います。テーブルを分割すると、多くの構造変更が必要になります。
ですから、この問題を解決する最善の方法を教えてください。
また、次のようなスパース列を使用しようとしました:
Create table ABCD(Id int, Name varchar(100) Sparse, Age int);
ColumnStoreIndexについても考えましたが、私の目的は解決されていません。
スパース列を使用すると、テーブルに 3000 列を作成できますが、ページ サイズも制限されます。
一時テーブルを使用するか、他のタイプのSQLサーバーオブジェクトを使用してそれを達成する方法はありますか?