2016-07-25 33 views
2

Ich habe eine vorhandene Tabelle in SQL SERVER 2008 mit einer ihrer Spalte als NVARCHAR (MAX) und es hat nur Werte von weniger als 10 Zeichen. Diese Tabelle ist in Produktion und enthält Daten.So ändern Sie die Spalte von nvarchar (max) zu nvarchar (50)

Ich habe eine Anforderung, wobei ich diese Spalte von NVARCHAR (MAX) zu NVARCHAR (50) ändern muss. T Der SQL Server gibt während der Operation einen Trunkierungsfehler, obwohl die Daten in dieser Spalte weniger als 10 Zeichen enthalten.

Das ist mein Skript:

ALTER TABLE [dbo].[Table] ALTER COLUMN [Column1] NVARCHAR (50) NOT NULL 
+3

Was ist der * genaue * Fehler? Sind Sie sicher, dass die Daten wirklich weniger als 10 Zeichen sind? Versuchen Sie, nach Zeilen 'WHERE LEN (Column1)> 50' zu suchen. Beachten Sie auch, dass 'NVARCHAR (MAX)' der Typ ist, der zum Speichern von * Blobs * verwendet wird, und SQL Server lässt die Typänderung möglicherweise nicht zu. Deshalb sollten Sie die vollständige Fehlermeldung –

+4

"die Daten in dieser Spalte sind weniger als 10 Zeichen" - sind Sie sicher? Es ist einfach, nachgestellte Leerzeichen zu haben. Bitte führen Sie SELECT * FROM dbo.TABLE WO LEN (Column1)> 50. – DaveBoltman

+1

Ist es wirklich ein Fehler, oder ist es eine Warnung? – HoneyBadger

Antwort

3

Erste Ihre Tabellendaten mit dieser Abfrage überprüfen:

SELECT DATALENGTH(Column_Name) AS FIELDSIZE, Column_Name 
FROM Table_Name 

Wenn alles in Ordnung ist, können Sie die Prevent Saving Changes Option aktiviert haben. Gehen Sie folgendermaßen vor um zu überprüfen:

Tools>Designer Uncheck Prevent Speichern von Änderungen, die Tabelle Neuschöpfung erfordern

+0

Das Speichern von Änderungen verhindern ist nur gültig, wenn Sie diesen schrecklichen Tabellen-Designer verwenden. Es wäre viel einfacher, stattdessen die Anweisung alter table zu schreiben. –

+0

Dies erfordert den Zugriff auf Management Studio in Produktionsdatenbanken. Ich brauche eine SQL Script basierte Lösung. – Prado

+0

Wenn Sie Live-Server-Verbindungszeichenfolge haben, versuchen Sie, eine Verbindung mit Ihrem SQL-Server herzustellen. Öffnen Sie run und geben Sie ssms ein und geben Sie Ihren Servernamen ein. Authentifizierung ist SQL Server-Authentifizierung Login und Passwort und diese Details haben Sie bereits in Ihrem Projekt Verbindungszeichenfolge verwendet, nachdem diese die Änderungen anwenden. Danke –

0

Wenn Sie sicher sind, dass Sie Daten nicht verlieren würde, dann gilt:

Update myTable set myNVMaxCol = left(coalesce(myNVMaxCol,''),50); 
Alter table myTable alter column myNVMaxCol nvarchar(50) not null; 
+1

Alternativ, verschieben Sie die Daten in eine neue Spalte, löschen Sie die alte comun und dann umbenennen. – HLGEM

Verwandte Themen