In der SQL Server-Spalte ändern von Typ int in den Typ text
Ich würde das gerne ändern einer Spalte in SQL Server vom Typ int, text eingeben, während die Aufrechterhaltung der Spalte name. Die Tabelle mit dieser Spalte hat viele Daten, und ich will nicht, es zu verlieren. SQL Server scheint nicht zu unterstützen implizite oder explizite casts von int auf text, ansonsten wäre dies ziemlich einfach. Also, wie würden Sie tun es nur mit SQL?
- 'text' oder 'varchar' ?
- Es gibt ein paar Antworten, sollten Sie durch Ihr problem, aber ich möchte nur hinzufügen, dass der TEXT-Datentyp hat eine Menge "Fallstricke". Sie sind fast sicher besser mit VARCHAR(MAX) oder NVARCHAR(MAX), vorausgesetzt, dass Ihr bei SQL 2005 oder später. Selbst wenn nicht, überlegen Sie sich eine sehr große VARCHAR-oder NVARCHAR statt.
- einen bestimmten Grund für text anstelle von nvarchar(max)?
- Der Grund für den text ist legacy basiert
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit MS-SQL-Server (wie die meisten Datenbanken) nicht direkt unterstützt, ändern Sie den Typ einer vorhandenen Spalte, die Sie haben zu tun Sie es in Schritten. Die Art, wie ich Probleme gelöst haben, wie dies in der Vergangenheit ist (vorausgesetzt, dein Tisch ist mit dem Namen 'foo' und die Spalte mit dem Namen 'bar'):
(Einige der SQL-syntax aus, es ist schon ein Jahr her, seit ich das Letzte mal Tat dies, bei einem anderen job, so dass ich don ' T haben Zugriff auf MS SQL-Server oder die Datenquelle. Sie haben auch mehr zu tun Sachen, wenn die Spalte einen index auf.)
Requisiten, um Donnie für die Konvertierung syntax.
[Bearbeiten]
Tom H. vorgeschlagen, die sp_rename gespeicherte Prozedur zum umbenennen
tempbar
alsbar
(anstelle der Schritte 4-6). Das ist eine MS-SQL-Server-spezifische Lösung, die für viele Umstände. Die Lösung, die ich beschrieben funktioniert (mit syntax-Revisionen) auf alle SQL-Datenbank unabhängig von der version. In meinem Fall wurde ich den Umgang mit primär-und Fremdschlüsseln, und nicht nur ein einzelnes Feld, so hatte ich zu vorsichtig, um alle Vorgänge UND portabel auf mehreren Versionen von MS SQL Server-als explizite arbeitete in meinen Gunsten.Nur Doppel-cast es durch ein Zwischenschritt geben, was Sie wollen.
cast(cast(intField as varchar) as text)
text
spezielle ist, können Sie nicht test für Gleichheit, haben die Verwendung von Volltext-Indizes, etc, also nur die Felder, die bekannt sind, zu textuellen Daten könnencast
zu.Hier ein kleines Beispiel-Skript, das zeigt, auf mögliche Methode:
Im Grunde erstellen wir eine Kopie der Tabelle, dann füllen Sie es. Wir konvertieren Sie zuerst die int nvarchar dann nehmen wir, um einen text-Wert. Schließlich ziehen wir die alte Tabelle und benennen Sie die temporäre Tabelle.