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.tables T JOIN sys.columns C ON 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
Paweł Dyl, 2013-12-20
Brak komentarzy - bądź pierwszy