2009-12-03 15 views

Odpowiedz

14

Tutaj możesz zacząć:

Select 'Alter Table [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] Alter Column [' + COLUMN_NAME + '] VarChar(' + CAST(CHARACTER_MAXIMUM_LENGTH As VARCHAR) + ')' 
From INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE = 'NVARCHAR' 

To wygeneruje wszystkie potrzebne ALTER dla Ciebie (wycinanie, wklejanie, uruchamianie).

Należy pamiętać, że nie uwzględnia to żadnych ograniczeń.

+1

+1 doskonały. Mam to samo rozwiązanie ... ale z bardzo brzydkim i skomplikowanym zapytaniem ... – Jonathan

+0

+1 Niesamowita technika :-) –

+0

@ Jonathan Jak używać kodu w tej odpowiedzi, aby "wygenerować wszystkie potrzebne instrukcje zmian" w SSQL Management Studio, dzięki któremu mogę "wycinać, wklejać, uruchamiać"? –

3

Zapytaj łuk danych, aby to zrobić?

lub

Generowanie skryptu wszystkich obiektów w systemie, a następnie zmienić na nvarchar, a następnie utworzyć nową bazę danych i zaimportować dane do niego ze starego.

lub

Napisz zmieniać skrypty zaktualizować istniejącą bazę danych.
(. To może być najlepszym rozwiązaniem, jeśli jest to baza produkcyjna, czy baza danych klienta)

+4

wysyłającego "zapytaj dane arch to zrobić". –

+0

Nie zapomnij najpierw sprawdzić, czy masz jakieś dane, które nie zostaną przekształcone w varchar. Zgadzam się, jeśli architekt danych tego chce, to do niego należy napisanie skryptów, aby to zrobić. – HLGEM

4

Aby obsłużyć max i wyklucza niggly sysdiagrams:

SELECT 
' 
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] 
ALTER COLUMN [' + COLUMN_NAME + '] 
VARCHAR(' + 
    (CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 
     THEN 'MAX' 
     ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) 
    END) 
+ ') 
' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE = 'NVARCHAR' AND TABLE_NAME <> 'SYSDIAGRAMS' 
Powiązane problemy