Wollte meine Erfahrung mit dem Konvertieren hinzufügen. Ich hatte viele text
Felder im alten Linq2SQL-Code. Auf diese Weise konnten text
in Indizes vorhandene Spalten ONLINE neu erstellt werden .
Zuerst wusste ich jahrelang über die Vorteile Bescheid, ging aber immer davon aus, dass das Konvertieren einige beängstigende lange Abfragen bedeuten würde, bei denen SQL Server die Tabelle neu erstellen und alles kopieren müsste, um meine Websites herunterzufahren und meine Herzfrequenz zu erhöhen.
Ich war auch besorgt, dass Linq2SQL Fehler verursachen könnte, wenn es eine Art Überprüfung des Spaltentyps durchführt.
Ich freue mich jedoch darüber zu berichten, dass die ALTER-Befehle SOFORT zurückgegeben wurden - sie ändern also definitiv nur Tabellenmetadaten. Möglicherweise wird offline gearbeitet, um Daten mit <8000 Zeichen wieder in die Tabelle aufzunehmen, aber der Befehl ALTER wurde sofort ausgeführt.
Ich habe Folgendes ausgeführt, um alle Spalten zu finden, die konvertiert werden müssen:
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name
Dies gab mir eine schöne Liste von Abfragen, die ich gerade ausgewählt und in ein neues Fenster kopiert habe. Wie ich schon sagte - das Laufen war sofort.
Linq2SQL ist ziemlich alt - es verwendet einen Designer, auf den Sie Tabellen ziehen. Die Situation mag für EF Code zuerst komplexer sein, aber ich habe das noch nicht angegangen.