Jestem w sytuacji, w której muszę zaktualizować istniejącą strukturę bazy danych z varchar do nvarchar za pomocą skryptu. Ponieważ ten skrypt jest uruchamiany za każdym razem, gdy uruchamiana jest aplikacja konfiguracyjna, wolałabym określić, czy kolumna została już zmieniona na nvarchar i czy nie dokonała zmiany w tabeli. Bazy danych, które muszą Popieram to SQL Server 2000, 2005 i 2008.Serwer SQL - skrypt do aktualizacji kolumn bazy danych z varchar do nvarchar, jeśli jeszcze nie jest nvarchar
9
A
Odpowiedz
2
Następująca kwerenda powinien dostać to, czego potrzebujesz:
IF EXISTS
(SELECT *
FROM sysobjects syo
JOIN syscolumns syc ON
syc.id = syo.id
JOIN systypes syt ON
syt.xtype = syc.xtype
WHERE
syt.name = 'nvarchar' AND
syo.name = 'MY TABLE NAME' AND
syc.name = 'MY COLUMN NAME')
BEGIN
ALTER ...
END
26
można uruchomić następujący skrypt, który da ci zestaw ALTER polecenia:
SELECT 'ALTER TABLE ' + isnull(schema_name(syo.id), 'dbo') + '.' + syo.name
+ ' ALTER COLUMN ' + syc.name + ' NVARCHAR(' + case syc.length when -1 then 'MAX'
ELSE convert(nvarchar(10),syc.length) end + ');'
FROM sysobjects syo
JOIN syscolumns syc ON
syc.id = syo.id
JOIN systypes syt ON
syt.xtype = syc.xtype
WHERE
syt.name = 'varchar'
and syo.xtype='U'
Istnieje jednak kilka szybkich Ostrzeżenia dla Ciebie.
- Spowoduje to tylko tabele. Będziesz chciał skanować wszystkie sprocs i funkcje, aby upewnić się, że są one również zmienione na
NVARCHAR
. - Jeśli masz
VARCHAR
> 4000 trzeba będzie zmodyfikować go miećNVARCHAR(MAX)
Ale te powinny być łatwo wykonalne z tego szablonu.
Jeśli chcesz, aby to działało automagicznie, możesz ustawić je w klauzuli WHILE
.
2
Naprawiono problem przestrzeni i dodaje schemat
SELECT 'ALTER TABLE [' + isnull(schema_name(syo.object_id), sysc.name) + '].[' + syo.name
+ '] ALTER COLUMN ' + syc.name + ' NVARCHAR(' + case syc.max_length when -1 then 'MAX'
ELSE convert(nvarchar(10),syc.max_length) end + ');'
FROM sys.objects syo
JOIN sys.columns syc ON
syc.object_id= syo.object_id
JOIN sys.types syt ON
syt.system_type_id = syc.system_type_id
JOIN sys.schemas sysc ON
syo.schema_id=sysc.schema_id
WHERE
syt.name = 'varchar'
and syo.type='U'
4
Problem z odpowiedzią Josef jest to, że byłoby to zmienić NOT NULL
pola do NULL
po wykonaniu zapytania. Poniższy manipulacja rozwiązuje go:
SELECT cmd = 'alter table [' + c.table_schema + '].[' + c.table_name
+ '] alter column [' + c.column_name + '] nvarchar('
+CASE WHEN CHARACTER_MAXIMUM_LENGTH<=4000
THEN CAST(CHARACTER_MAXIMUM_LENGTH as varchar(10)) ELSE 'max' END+')'
+ CASE WHEN IS_NULLABLE='NO' THEN ' NOT NULL' ELSE '' END,*
FROM information_schema.columns c
WHERE c.data_type='varchar'
ORDER BY CHARACTER_MAXIMUM_LENGTH desc
kuponów do Igor's answer
Powiązane problemy
- 1. (NIE) NULL dla kolumn NVARCHAR
- 2. Określanie zawartości varchar w kolumnach nvarchar
- 3. Zapytanie sql do konwertowania nvarchar na int
- 4. Problem z Linq na SQL nvarchar
- 5. Zmień typ danych varchar na nvarchar w istniejącej bazie danych SQL Server 2005. Jakieś problemy?
- 6. Jak zmienić każdą kolumnę nvarchar na varchar?
- 7. nvarchar (256) ....?
- 8. różnica między VARCHAR NVARCHAR w SQLite
- 9. Błąd typu konwersji danych nvarchar do datetime
- 10. Czy nvarchar zawsze zajmuje dwa razy więcej miejsca niż varchar?
- 11. Błąd konwersji typu danych nvarchar int
- 12. SqlServer i nvarchar (max)
- 13. Zmiana kolumny danych z varchar (max) na nvarchar (max) w SQL Server 2008
- 14. Skrypt SQL do "kopiowania" bazy danych
- 15. Kiedy należy używać NVARCHAR/NCHAR zamiast VARCHAR/CHAR w SQL Server?
- 16. Obsada ciąg + ntext błędu nvarchar
- 17. Co to jest odpowiednik PostgreSQL dla SQL Server NVARCHAR?
- 18. Jak przekonwertować kolumnę Nvarchar do INT
- 19. Konwersja nvarchar do bigint w serwerze SQL 2008
- 20. Jak utworzyć indeks na nvarchar (max) typ danych w sql?
- 21. Serwer SQL: konwersja varchar do INT
- 22. MS SQL: Konwertuj kolumnę Datetime na nvarchar
- 23. Skrypt wsadowy, jeśli jeszcze komenda
- 24. tekst i typy danych są niezgodne nvarchar w równej operatora
- 25. Serwer SQL podający login (użytkownicy) db_owner dostęp do bazy danych
- 26. Jak wymusić szerokość wejściową nvarchar w SQL Server?
- 27. Przekształcanie/Przesyłanie nVarChar z separatorem przecinków na dziesiętne
- 28. Serwer SQL: Importowanie bazy danych z .mdf?
- 29. Jak wstawić znaki arabskie do bazy danych sql?
- 30. Wstawianie znaków narodowych do wyroczni NCHAR lub kolumny NVARCHAR nie działa
To działało pięknie do mnie. Świetny mały skrypt! – DanM
Uważaj, ponieważ otrzymasz wszystkie domyślne wartości dla nowej kolumny. Np. Niedotykalny varchar zostanie utworzony jako nvarchar nullable. –