Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2005
atirado atirado is offline
Miembro
 
Registrado: mar 2004
Posts: 41
Poder: 0
atirado Va por buen camino
Question ¿Cómo poder cambiar el collate en toda una BBDD de SQL?

Hola a tod@s!

Primero que nada un saludo a todo el foro
Les escribo a ver si alguno de ustedes me puede echar la mano en un asuntito con SQL Server 2000.
He tenido algunos problemas de intercalación del operador "=" al comparar 2 valores en campos que son varchar.
Leyendo un poco, me he enterado que todo es problema del COLLATE (intercalación) de SQL Server, y he modificado algunas tablas con campos varchar.
Sin embargo, tengo alrededor de 50 tablas con campos varchar por base de datos y son cerca de 30 bases de datos las que tendría qué modificar, multiplíquenle que cada tabla tiene 1 ó 2 campos varchar. Eso da un demonial de trabajo "a pie", jeje
He visto en las propiedades de cada Base de Datos, que tiene una intercalación "predefinida", sin embargo, esta información viene como sólo lectura.
¿Alguno de ustedes sabe cómo modificarla en TODA la base de datos sin hacerlo campo por campo, tabla por tabla?

¡Agradeceré cualquier información!

Un saludo enorme desde México

Alejandro
Responder Con Cita
  #2  
Antiguo 26-04-2005
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 19
droguerman Va por buen camino
Cool

Nota: eso me funcionó a mí, pero te recomendaría que saques un backup antes

primero cambia la intercalación de la base de datos por ejemplo a SQL_Latin1_General_CP1_CI_AS:
Código:
 ALTER DATABASE <nombre> COLLATE SQL_Latin1_General_CP1_CI_AS
luego generamos un script usando el Analizador de Consultas (no es una maravilla de hecho falla con tipos de datos de usuario pero te puede servir)

Código:
 SELECT 'ALTER TABLE ' + o.name + ' ALTER COLUMN ' + C.name + ' ' + 
 	T.name +'(' + CAST(c.length as varchar(4)) + ') COLLATE ' + 
 ' SQL_Latin1_General_CP1_CI_AS;'
 from syscolumns C, sysobjects O, systypes T 
 where (C.collation is not null) and C.id = O.id and c.TYPE = T.TYPE AND
 C.XUSERTYPE = T.XUSERTYPE AND o.type = 'U'  
 ORDER BY O.NAME;
eso te generará una secuencias de comandos SQL ejecutalos y mucha suerte
Responder Con Cita
  #3  
Antiguo 28-04-2005
atirado atirado is offline
Miembro
 
Registrado: mar 2004
Posts: 41
Poder: 0
atirado Va por buen camino
Thumbs up Re:

Muchas gracias, droguerman! ya pude resolver el problema

saludos enormes!
Responder Con Cita
  #4  
Antiguo 03-03-2015
Avatar de gabrielflowers
gabrielflowers gabrielflowers is offline
Miembro
 
Registrado: jul 2007
Posts: 88
Poder: 17
gabrielflowers Va por buen camino
resuelto

Por si a alguien le sirve la forma correcta de cambiar la intercalacion de una base de datos, de todas sus tablas, y campos seria:

Código SQL [-]

ALTER DATABASE MiBd --bd 
COLLATE Modern_Spanish_CI_AS;  --intercalacion

--

use MiBD--bd
declare @var1 as nvarchar(max)

DECLARE micursor CURSOR SCROLL FOR
SELECT 'ALTER TABLE ' + o.name + ' ALTER COLUMN [' + C.name + '] ' + 
T.name +'(' + CAST(c.length as varchar(4)) + ') COLLATE ' + 
'Modern_Spanish_CI_AS; ' --poner aca la intercalacion
from syscolumns C, sysobjects O, systypes T 
where (C.collation is not null) and C.id = O.id and c.TYPE = T.TYPE AND
C.XUSERTYPE = T.XUSERTYPE AND o.type = 'U'  
ORDER BY O.NAME;

OPEN micursor
FETCH NEXT FROM micursor INTO @var1
WHILE(@@FETCH_STATUS = 0 ) 
BEGIN
  --codigo transact sql
  --select @var1
  exec(@var1)
  
  FETCH NEXT FROM micursor INTO @var1
END
CLOSE micursor
DEALLOCATE micursor
__________________
"valor a pesar de toda debilidad del cuerpo, el espiritu debe triunfar"
Responder Con Cita
  #5  
Antiguo 03-03-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
10 años después

Gracias, nunca es tarde
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:12:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi