Ich möchte eine Spalte in SQL Server vom Typ Int, um Text einzugeben, während der Spaltenname beibehalten. Die Tabelle mit dieser Spalte enthält viele Daten, und ich möchte sie nicht verlieren. SQL Server scheint implizite oder explizite Umwandlungen von int zu Text nicht zu unterstützen, sonst wäre das ziemlich einfach. Also, wie würdest du es nur mit SQL machen?In SQL Server ändern Spalte des Typs Int, um Text
Antwort
Da MS SQL Server (wie die meisten Datenbanken) keine direkte Änderung des Typs einer vorhandenen Spalte unterstützt, müssen Sie dies in Schritten tun. Die Art, wie ich Probleme wie diese in der Vergangenheit gelöst haben wird (Tisch unter der Annahme ‚foo‘ genannt und Ihre Spalte ‚bar‘ genannt):
ALTER TABLE foo ADD COLUMN tempbar text;
UPDATE foo SET tempbar = cast(cast(bar as varchar) as text);
ALTER TABLE foo DROP COLUMN bar;
ALTER TABLE foo ADD COLUMN bar text;
UPDATE foo SET bar = tempbar;
ALTER TABLE foo DROP COLUMN tempbar;
(Ein Teil der SQL-Syntax aus sein kann, es ist schon ein Jahr, seit ich das letzte Mal in einem anderen Job gemacht habe, habe ich keinen Zugriff auf MS SQL Server oder die Quelle. Sie müssen auch mehr Sachen machen, wenn Ihre Spalte einen Index darauf hat.)
Props zu Donnie für die Konvertierungssyntax.
[Bearbeiten]
Tom H. mit vorgeschlagen, die sp_rename gespeicherte Prozedur tempbar
als bar
(anstelle der Schritte 4-6) umzubenennen. Das ist eine MS SQL Server-spezifische Lösung, die für viele Umstände funktionieren kann. Die beschriebene Lösung funktioniert (mit Syntaxrevisionen) auf beliebigen SQL-Datenbank, unabhängig von der Version. In meinem Fall hatte ich es mit Primär- und Fremdschlüsseln zu tun, und nicht nur mit einem einzelnen Feld, also musste ich alle Operationen sorgfältig anordnen und über mehrere Versionen von MS SQL Server portierbar sein - wobei ich ausdrücklich zu meinen Gunsten arbeitete.
Anstatt die Leiste zu löschen, neu hinzuzufügen und dann zu füllen, können Sie sie einfach ablegen und temporär umbenennen. –
sp_rename funktioniert nicht in SQL CE. – Edgar
Nur Doppel-Cast es über einen Zwischen-Typ, was Sie wollen.
cast(cast(intField as varchar) as text)
Ich werde diesen Versuch geben. Vielen Dank! Warum behandelt MS SQL das nicht selbst? – manu08
'Text' ist speziell, Sie können nicht auf Gleichheit prüfen, müssen Volltextindizes verwenden, usw., so dass nur Felder, die dafür bekannt sind, Textdaten zu enthalten, in sie" umgewandelt "werden können. – Donnie
Hier ist eine kleine Beispielskript, das auf mögliche Methode zeigt:
create table test (id int)
create table test_tmp (id ntext)
insert into test
values (1)
insert into test
values (2)
insert into test_tmp
select convert(ntext,cast(id as nvarchar)) from test
drop table test
exec sp_rename 'test_tmp','test'
Grundsätzlich wir eine Kopie der Tabelle zu erstellen, füllen Sie es dann. Wir konvertieren zuerst das int in nvarchar, dann nehmen wir einen Textwert an. Schließlich löschen wir die alte Tabelle und benennen die temporäre Tabelle um.
- 1. Ändern des Inhalts einer Spalte in SQL Server 2008
- 2. Ändern des Spaltennamens in SQL Server 2000
- 3. Ändern Standardwert in SQL Server
- 4. Int 10 in SQL Server
- 5. SQL Server; Index auf TEXT Spalte
- 6. Passing Parameter des Typs 'Objekt' in Tabellenwertparameter für sql_variant Spalte
- 7. Wie Ändern des Instanzennamens in SQL Server
- 8. Leere Zeichenfolge in INT-Spalte für SQL Server einfügen
- 9. SQL Server einfügen mehr Zeilen und eine int Spalte
- 10. Ändern des booleschen Spaltentyps in int
- 11. SQL Server: Überprüfen des Datentyps einer Spalte
- 12. Einsatz int in xml-Spalte SQL
- 13. SUM Spalte SQL SERVER
- 14. SQL Server berechnete Spalte
- 15. Ändern des Benutzerid-Typs in int in ASP.NET Identity in VS2015
- 16. Ändern Sie XML in SQL Server, um einen Stammknoten hinzuzufügen
- 17. Ändern des Datenbanknamens im SQL-Server-Skript
- 18. Spalte umbenennen in SQL Server
- 19. SQL Server: Spalte in Tabelle
- 20. Berechnete Spalte in SQL Server
- 21. DateCreated Spalte in Sql Server?
- 22. SQL Server Xpath, um Text Wert für bestimmte XML-Element
- 23. Ändern des Wartungsplans in SQL Server Management Studio
- 24. SQL Server: Abrufen des doppelten Werts in einer Spalte
- 25. MS SQL Server NTEXT zu INT
- 26. SQL Server - 2008 Spalte Datentyp
- 27. Oracle Äquivalent des TEXT-Typs von MySQL
- 28. Entfernen von [] um Spalte in SQL Server 2005
- 29. Spalte zu Zeile in SQL Server?
- 30. Kombiniere varchar Spalte mit int Spalte
'Text' oder 'Varchar'? –
Es gibt ein paar Antworten, die Sie durch Ihr Problem bringen sollten, aber ich möchte nur hinzufügen, dass der TEXT-Datentyp viele "gotchas" hat. Sie sind fast sicher besser dran mit VARCHAR (MAX) oder NVARCHAR (MAX) unter der Annahme, dass Sie bei SQL 2005 oder später. Wenn nicht, sollten Sie stattdessen einen sehr großen VARCHAR oder NVARCHAR verwenden. –
einen bestimmten Grund für Text anstelle von Nvarchar (max)? – DForck42