Datenbank auf Unicode umstellen
Wenn eine SQL Server Datenbank auf Unicode umgestellt werden soll, muss dies über die Umstellung des Datentyps der Tabellenspalten von VARCHAR auf NVARCHAR erfolgen. Man kann sich die entsprechenden Spalten von Hand raussuchen und die entsprechenden ALTER TABLE x ALTER COLUMN y NVARCHAR(z) Kommandos zusammenschreiben, man kann aber auch das nachfolgende Skript verwenden, um sich die Arbeit etwas zu erleichtern...
Bevor die Spalten umgebaut werden, müssen etwaige Constraints deaktiviert und anschließend wieder aktiviert werden. Dies kann (je nach Umfang) über das SQL Server Management Studio (Script Constraint as --> DROP And CREATE To --> New Query Editor Window) erfolgen - oder man baut sich dafür ein Skript.
-- Konvertiert alle Spalten einer Tabelle von VARCHAR(size) zu NVARCHAR(size) USE [ReplaceDatabaseName] -- DB-Namen entsprechend anpassen GO DECLARE @CursorColumns CURSOR; DECLARE @ModifyTableName varchar(250); DECLARE @StmtModifyColumn varchar(max); DECLARE @StmtRebuildTable varchar(max); DECLARE @PreviewOnly BIT = 1; -- 1 für nur Ausgabe der Statements; 0 für Ausführung der Statements SET @ModifyTableName = 'ReplaceTableName'; -- Tabellennamen entsprechend anpassen BEGIN -- Modify Column Statement generieren SET @CursorColumns = CURSOR FOR SELECT 'ALTER TABLE ' + @ModifyTableName + ' ALTER COLUMN ' + c.name + ' NVARCHAR(' + CASE c.max_length WHEN -1 THEN 'max' ELSE CAST(c.max_length AS VARCHAR) END + ') ' + CASE c.is_nullable WHEN 0 THEN 'NOT NULL' WHEN 1 THEN '' END + ';' FROM sys.columns c INNER JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.object_id = OBJECT_ID(@ModifyTableName) AND UPPER(t.Name) = 'VARCHAR'; OPEN @CursorColumns; -- Modify Column Statement anzeigen oder ausführen FETCH NEXT FROM @CursorColumns INTO @StmtModifyColumn; WHILE @@FETCH_STATUS = 0 BEGIN IF @PreviewOnly = 1 PRINT @StmtModifyColumn; ELSE EXEC (@StmtModifyColumn); FETCH NEXT FROM @CursorColumns INTO @StmtModifyColumn; END; CLOSE @CursorColumns; DEALLOCATE @CursorColumns; -- Table Rebuild SET @StmtRebuildTable = 'ALTER TABLE ' + @ModifyTableName + ' REBUILD;'; IF @PreviewOnly = 1 PRINT @StmtRebuildTable; ELSE EXEC (@StmtRebuildTable); END;