Group: microsoft.public.it.sql




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