Subject: cambio di collate
From: Roberto Nenni
Date: 4/26/2007 9:10:00 AM
ho un database XXX dove la collate di default è Latin1_General_CI_AS
tutti gli altri database hanno invece SQL_Latin1_General_CP1_CI_AS, compreso
TEMPDB
vorrei allineare quindi il database XXX alla stessa collate di tutti gli
altri
ho eseguito il comando
alter database XXX collate SQL_Latin1_General_CP1_CI_AS
vedo però che questo comando modifica solo il default per le nuove tabelle,
ma non modifica quelle esistenti e quindi presumo di dover fare una serie di
alter table alter column colonna varchar(xxx) collate
SQL_Latin1_General_CP1_CI_AS xxx
obbligandomi quindi a rispecificare tutti gli attributi della colonna (tipo,
dimensione, null/not null, default....)
inoltre non è possibile eseguire la modifica di una colonna se essa fa parte
di un oggetto esterno (primary key o altri indici), il messaggio emesso è
Server: messaggio 5074, livello 16, stato 8, riga 1
Il indice 'xxxxxxxxx' dipende da colonna 'xxxxxx'.
domande:
sbaglio qualcosa?
c'è un modo più veloce per fare questa manovra?
esiste un tool che lo fa?
grazie a tutti
Roberto Nenni
Subject: cambio di collate
From: Andrea Benedetti
Date: 4/26/2007 9:35:48 AM
Salve Roberto,
"Roberto Nenni" <nennir@dpinfoSENZAQUESTO.it> ha scritto nel messaggio
news:46305046$0$7755$5fc30a8@news.tiscali.it...
> ho un database XXX dove la collate di default è Latin1_General_CI_AS
> tutti gli altri database hanno invece SQL_Latin1_General_CP1_CI_AS,
> compreso TEMPDB
> vorrei allineare quindi il database XXX alla stessa collate di tutti gli
> altri
>
> ho eseguito il comando
> alter database XXX collate SQL_Latin1_General_CP1_CI_AS
> vedo però che questo comando modifica solo il default per le nuove
> tabelle, ma non modifica quelle esistenti e quindi presumo di dover fare
> una serie di
> alter table alter column colonna varchar(xxx) collate
> SQL_Latin1_General_CP1_CI_AS xxx
> obbligandomi quindi a rispecificare tutti gli attributi della colonna
> (tipo, dimensione, null/not null, default....)
> inoltre non è possibile eseguire la modifica di una colonna se essa fa
> parte di un oggetto esterno (primary key o altri indici), il messaggio
> emesso è
> Server: messaggio 5074, livello 16, stato 8, riga 1
> Il indice 'xxxxxxxxx' dipende da colonna 'xxxxxx'.
>
> domande:
> sbaglio qualcosa?
> c'è un modo più veloce per fare questa manovra?
> esiste un tool che lo fa?
No, non sbagli nulla.
SQL Server si comporta correttamente: a partire da quando modifichi la
collation di default del database ogni nuovo oggetto seguirà le regole
definite. Tutti gli altri oggetti già presenti manterranno le impostazioni
definite.
Per modificare la collation delle tabelle già presenti devi ricorrere, come
dici, ad istruzioni "alter table... alter column..."
Qui: http://www.absistemi.it/tipsql.aspx?id=21 trovi un piccolo script che
fa proprio quello di cui hai bisogno (analizza *bene* quello che fa).
Un piccolo (piccolissimo) stratagemma potrebbe essere quello di scriptare il
database in modalità SQL 7.
In questo modo lo script non porterà con se le istruzioni di COLLATE e
quindi, rieseguendolo il database (e quindi le tabelle e le colonne)
prenderà la collation di default.
Comunque, prima di qualsiasi operazione, fa sempre un bel backup!
Non fa mai male ;-)
> grazie a tutti
>
> Roberto Nenni
Ciao!
--
Andrea Benedetti
Microsoft MVP - SQL Server
www.absistemi.it - www.ugiss.org
http://blogs.ugidotnet.org/ab
http://mvp.support.microsoft.com
http://italy.mvps.org
Subject: cambio di collate
From: Lorenzo Benaglia
Date: 4/26/2007 10:04:16 AM
Roberto Nenni wrote:
> c'è un modo più veloce per fare questa manovra?
> esiste un tool che lo fa?
Ciao Roberto,
come ti ha spiegato Andrea l'unico modo corretto per modificare la collation
di una colonna preesistente consiste nell'eseguire il comando ALTERT TABLE.
Tempo fa per scrupolo, ho provato a giocare con le tabelle di sistema.
In questo thread trovi tutti i passi:
http://groups.google.it/group/microsoft.public.it.sql/browse_thread/thread/6d931be56ac1f0f5
/
ATTENZIONE: se hai definito degli indici clustered al termine
dell'operazione dovrai ricostruirli altrimenti otterrai comportamenti
"bizzarri" :-D
Inoltre questo metodo non è supportato, pertanto non mi prendo la
responsabilità di eventuali corruzioni o perdite di dati :-)
> grazie a tutti
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org
Subject: cambio di collate
From: Roberto Nenni
Date: 4/26/2007 11:09:04 AM
"Andrea Benedetti" <abenedetti@absistemi.it> ha scritto nel messaggio
news:O%23IUDW9hHHA.4952@TK2MSFTNGP02.phx.gbl...
> No, non sbagli nulla.
> SQL Server si comporta correttamente: a partire da quando modifichi la
> collation di default del database ogni nuovo oggetto seguirà le regole
> definite. Tutti gli altri oggetti già presenti manterranno le impostazioni
> definite.
è quello che temevo
> Per modificare la collation delle tabelle già presenti devi ricorrere,
> come dici, ad istruzioni "alter table... alter column..."
> Qui: http://www.absistemi.it/tipsql.aspx?id=21 trovi un piccolo script che
> fa proprio quello di cui hai bisogno (analizza *bene* quello che fa).
l'ho preso e l'ho usato per produrmi lo script delle variazioni da fare,
molto comodo
> Un piccolo (piccolissimo) stratagemma potrebbe essere quello di scriptare
> il database in modalità SQL 7.
> In questo modo lo script non porterà con se le istruzioni di COLLATE e
> quindi, rieseguendolo il database (e quindi le tabelle e le colonne)
> prenderà la collation di default.
non capisco cosa intendi, non ho mai lavorato con SQL 7
grazie molte
ciao
Roberto
Subject: cambio di collate
From: Andrea Benedetti
Date: 4/26/2007 11:35:24 AM
Salve Roberto,
"Roberto Nenni" <nennir@dpinfoSENZAQUESTO.it> ha scritto nel messaggio
news:46306c31$0$20823$5fc30a8@news.tiscali.it...
[cut]
>> Un piccolo (piccolissimo) stratagemma potrebbe essere quello di scriptare
>> il database in modalità SQL 7.
>> In questo modo lo script non porterà con se le istruzioni di COLLATE e
>> quindi, rieseguendolo il database (e quindi le tabelle e le colonne)
>> prenderà la collation di default.
> non capisco cosa intendi, non ho mai lavorato con SQL 7
Supponi di avere un database simile a:
use master
go
create database test
go
use test
go
create table stranaCollate
(
colonna varchar(20) collate Polish_CI_AS
)
go
Se scripti questo db con compatibilità SQL Server 7 (che non gestiva la
COLLATION) ottieni:
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[stranaCollate]') and OBJECTPROPERTY(id, N'IsUserTable') =
1)
drop table [dbo].[stranaCollate]
GO
CREATE TABLE [dbo].[stranaCollate] (
[colonna] [varchar] (20) NULL
) ON [PRIMARY]
GO
Come vedi la colonna della tabella *non* ha l'impostazione di collate.
Quando eseguirai questo script su un altro server / istanza la colonna
prenderà quindi la collation di default.
> grazie molte
Prego!
> ciao
> Roberto
Ciao!
--
Andrea Benedetti
Microsoft MVP - SQL Server
www.absistemi.it - www.ugiss.org
http://blogs.ugidotnet.org/ab
http://mvp.support.microsoft.com
http://italy.mvps.org
|