Umgehen Sie die maximale Größe von SQL Server-Spalten für Datensätze mit 1024 und 8 KB

Ich erstelle eine Tabelle mit 1000 Spalten. Die meisten Spalten sindnvarchar Art. Die Tabelle wird erstellt, jedoch mit einer Warnung

Warnung: Die Tabelle "Test" wurde erstellt, ihre maximale Zeilengröße überschreitet jedoch das zulässige Maximum von 8060 Byte. INSERT oder UPDATE für diese Tabelle schlagen fehl, wenn die resultierende Zeile die Größenbeschränkung überschreitet.

Die meisten Spalten der Tabelle enthalten bereits Daten (d. H. 99% der Spalten enthalten Daten). Wenn ich versuche, eine Spalte nach der 310. zu aktualisieren (wobei alle ab 309 Spalten einen bestimmten Wert haben), wird ein Fehler ausgegeben:

Es kann keine Zeile der Größe 8061 erstellt werden, die größer als die zulässige maximale Zeilengröße von 8060 ist.

Ich füge diese Daten in alle ab 308 Spalten ein

"Lorem ipsum dolor sitzen amet, consectetur adipisicing elit."

Wenn ich benutzentext Datentyp dann erlaubt es mir, etwa 450 Spalten zu aktualisieren, aber darüber hinausntext erlaubt es mir auch nicht. Ich muss mindestens 700 Spalten aktualisieren. Welcher SQL Server erlaubt das nicht? Ich habe das Szenario, dass ich einige Tabellenspalten nicht in eine andere Tabelle verschieben kann.

Eigentlich arbeite ich für eine bestehende Fensteranwendung. Es ist eine sehr große Windows-Anwendung.

Tatsächlich wird die Tabelle, in die ich bis zu 700 nvarchar-Spaltendaten einfügen möchte, zur Laufzeit dynamisch erstellt. Nur in einigen Fällen müssen 400-600 Spalten eingefügt werden. Im Allgemeinen werden jedoch 100-200 Spalten benötigt, die ich problemlos verarbeiten kann.

Das Problem ist, dass ich diese Tabelle nicht in mehrere Tabellen aufteilen kann. Da viele mit diesen Strukturen erstellte Tabellen und Tabellennamen in einer anderen Tabelle verwaltet werden, d. H. Mehr als 100 Tabellen mit dieser Struktur vorhanden sind, werden sie dynamisch erstellt. Zum Erstellen der Tabelle und zum Bearbeiten ihrer Daten werden 4-5 Sprachen (C #, Java ..) verwendet, und auch WCF, Windows Service und Webservices gehören dazu.

Daher denke ich nicht, dass es einfach wäre, die Tabelle und ihre Daten nach dem Aufteilen der Tabelle zu manipulieren. Wenn ich die Tabelle aufteilen würde, müssten viele strukturelle Änderungen vorgenommen werden.

Schlagen Sie mir daher bitte vor, wie Sie dieses Problem am besten lösen können.

Ich habe auch versucht, zu verwendenSparse Column mögen:

Create table ABCD(Id int, Name varchar(100) Sparse, Age int);

Ich habe auch darüber nachgedachtColumnStoreIndex aber mein zweck ist nicht gelöst.

Mit sparsamen Spalten kann ich 3000 Spalten für eine Tabelle erstellen, aber auch die Seitengröße einschränken.

Gibt es eine Möglichkeit, dies mithilfe einer temporären Tabelle oder mithilfe eines anderen SQL Server-Objekttyps zu erreichen?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage