Ich habe eine Tabelle mit über 20 Millionen Zeilen. Ich möchte die Breite einer Spalte von nvarchar(100)
zu nvarchar(50)
mit minimaler Ausfallzeit reduzieren. Die Verwendung von Azure SQL premium 1 SKU dauert mit dem Befehl alter table eine Stunde.SQL Server: wie man eine Spaltenbreite mit minimaler Ausfallzeit reduziert
Eine Option, die ich mir vorstellen kann, ist, eine neue Spalte zu erstellen und die Daten in Batches (sagen wir 100k) zu kopieren. Nehmen Sie schließlich eine exklusive Sperre, kopieren Sie die neuen Zeilen, die möglicherweise aufgetreten sind, und benennen Sie die Spalten anschließend um.
Gibt es einen besseren Weg, dies zu tun?
Warum? 'NVARCHAR' benötigt den benötigten Speicherplatz, einige Bytes Overhead ... Wenn die Daten in dieser Spalte nicht größer als 50 sind, wird es nicht viel bewirken ... Wenn es längere Strings gibt, werden Sie diese abschneiden. .. Wenn Sie nur sicherstellen möchten, dass Daten nicht länger als 50 am einfachsten sind, fügen Sie eine 'CHECK'-Einschränkung hinzu ... – Shnugo
Ich muss einen zusammengesetzten Index erstellen, der die Schlüssellänge überschreitet, also muss ich die Breite ändern. –
Hmm, ich kenne Ihren Tisch nicht, aber ein so großer Index mit 20 Millionen Zeilen klingt nicht gut ... Raum spielt keine Rolle - offensichtlich - Sie könnten also einfach eine persistente berechnete Spalte hinzufügen und diese in Ihrem verwenden index ... – Shnugo