Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cambiare Collation a tutte le tabelle di un Database

675 views
Skip to first unread message

S.

unread,
Dec 3, 2009, 4:31:01 AM12/3/09
to
Salve a tutti,
vorrei cambiare la collation (non solo del database, ma anche di tutte le
colonne di tutte le tabelle) da SQL_Latin1_General_CP1_CI_AS a
SQL_Latin1_General_CP1_CI_AI.
Uso SQL Server 2005, come posso svolgere questa operazione facilmente?
Esiste un modo per generare questo script in maniera automatica dal SQL
Server Management Studio?
Grazie in anticipo a chi vorrà aiutarmi.
Sergio

Lorenzo Benaglia

unread,
Dec 3, 2009, 5:52:52 AM12/3/09
to
"S." <S...@discussions.microsoft.com> wrote:
> vorrei cambiare la collation (non solo del database, ma anche di tutte le
> colonne di tutte le tabelle) da SQL_Latin1_General_CP1_CI_AS a
> SQL_Latin1_General_CP1_CI_AI.
> Uso SQL Server 2005, come posso svolgere questa operazione facilmente?
> Esiste un modo per generare questo script in maniera automatica dal SQL
> Server Management Studio?

Ciao Sergio,

Purtroppo non esiste una soluzione "magica" :-)
Vai di ALTER TABLE...ALTER COLUMN, avendo cura di rimuovere indici e
constraint sulle colonne coinvolte.

> Grazie in anticipo a chi vorrà aiutarmi.

Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit

Luca Bianchi

unread,
Dec 3, 2009, 6:50:03 AM12/3/09
to
> vorrei cambiare la collation (non solo del database, ma anche di tutte le
> colonne di tutte le tabelle) da SQL_Latin1_General_CP1_CI_AS a
> SQL_Latin1_General_CP1_CI_AI.
> Uso SQL Server 2005, come posso svolgere questa operazione facilmente?

Per facilitare quello che ti ha indicato Lorenzo puoi ricorrere a questo
script

DECLARE cursore CURSOR FOR
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH,
IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE LIKE '%char%'
AND COLLATION_NAME = 'SQL_Latin1_General_CP1_CI_AS'

DECLARE @tname sysname,
@cname sysname,
@dt varchar(50),
@length varchar(5),
@sql VARCHAR(500),
@isnull VARCHAR(10)

OPEN cursore
FETCH NEXT FROM cursore INTO @tname, @cname, @dt, @length, @isnull

WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER TABLE ' + @tname + ' ALTER COLUMN ' + @cname + ' ' + @dt
+ '(' + @length + ') ' + ' SQL_Latin1_General_CP1_CI_AI ' +
CASE @isnull WHEN 'YES' THEN 'NULL ' ELSE 'NOT NULL ' END + CHAR(13) + '
GO'

PRINT @sql
FETCH NEXT FROM cursore INTO @tname, @cname, @dt, @length, @isnull
END

CLOSE cursore
DEALLOCATE cursore


> Grazie in anticipo a chi vorrà aiutarmi.
> Sergio

Bye

Luca Bianchi

S.

unread,
Dec 3, 2009, 11:33:01 AM12/3/09
to
"Luca Bianchi" wrote:

[cute]
> Luca Bianchi

Grandioso!
Grazie davvero,
Sergio

0 new messages