Spis treści:

Kategoria:SQL Server


Zamiana wszystkich kolumn typu ntext na nvarchar(MAX)

Dlaczego trzeba zamieniać?

Jak już napisałem wcześniej, typy text i ntext nie powinny być używane. Cały wpis można przeczytać pod tym adresem: Porównanie ntext i nvarchar(max). Obiecałem też, że dodam skrypt, który zamienia wszystkie kolumny typu ntext na kolumny nvarchar(MAX) z zachowaniem zawartości kolumn. Mam nadzieję, że komuś się przyda. Nie będę go szczegółowo opisywał. Zagadnienia teoretyczne opisane są we wskazanym artykule.

Skrypt właściwy


DECLARE NTextColumns CURSOR FOR
SELECT T.[name], C.[name]
FROM sys.tablesJOIN sys.columnsON T.[object_id]=C.[object_id]
JOIN sys.types Tp ON C.user_type_id=Tp.user_type_id
WHERE Tp.[name]='ntext'

DECLARE @table nvarchar(128)
DECLARE @column nvarchar(128)
DECLARE @sql nvarchar(1024)

OPEN NTextColumns
FETCH NEXT FROM NTextColumns INTO @table, @column
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql = 'ALTER TABLE '+@table+' ALTER COLUMN '+@column+' NVARCHAR(MAX)'
EXEC sp_executesql @sql
FETCH NEXT FROM NTextColumns INTO @table, @column
END
CLOSE NTextColumns
DEALLOCATE NTextColumns

Kategoria:SQL Server

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
Dzieki za rozjasnienie zagadnienia upsert. wlasnie sie ucze programowania :).
Co się stanie gdy spróbuję wyszukać:
SELECT * FROM NV_Airport WHERE Code='SVO'
SELECT * FROM V_Airport WHERE Code=N'SVO'
(odwrotnie są te N-ki)
Będzie konwersja czy nie znajdzie żadnego rekordu?