Problema con COLLATE

02/03/2004 - 00:23 por Víctor Rafael Bocanegra Arias | Informe spam
Hola grupo, les escribo para ver si me pueden ayudar con un problema que se
me ha presentado. Estamos migrando de Servidor y a la hora de migrar la
informacion me he dado cuenta que la "intercalacion" del nuevo servidor es
distinta a la del antiguo. He realizado un backup y he restaurado la
informacion y no he tenido ningun problema a la hora de realizar la
restauracion pero si he tenido problemas a la hora de ejecutar algunos
procedimientos almacenados. He cambiado la intercalacion a la antigua BD con
la del nuevo servidor pero el problema persiste. Que consejos me pueden dar
al respecto?, algun comentario sugerencia? si necesitan mas informacion solo
haganmelo saber.

Gracias anticipadamente

Victor Rafael Bocanegra Arias
Barreda Moller
Lima, Peru

Preguntas similare

Leer las respuestas

#6 Víctor Rafael Bocanegra Arias
02/03/2004 - 14:35 | Informe spam
Gracias por tu respuesta Ulises. Exacto, eso es lo que debe estar sucediendo
voy a el link que me has mandado y luego te aviso.

Gracias de nuevo por tu respuesta.

Salu2

Victor Rafael Bocanegra Arias
Barreda Moller
Lima, Peru

"ulises" escribió en el mensaje
news:4d1201c3ffea$617d2f10$
Hola Victor,

A pesar de haber cambiado el collation de la base de datos
deben seguir persistiendo el collation definido a nivel de
tablas y columnas y eso solo lo puedes modificar con un
ALTER. En este URL http://www.freevbcode.com/ShowCode.asp?
IDT48 figura código en VB .NET que te permite cambiar el
collation para toda la base de datos, revisalo a ver si te
ayuda, o si tu base de datos no es muy grande tal vez sea
más seguro hacerlo manualmente.

Saludos,
Ulises

Hola grupo, les escribo para ver si me pueden ayudar con


un problema que se
me ha presentado. Estamos migrando de Servidor y a la


hora de migrar la
informacion me he dado cuenta que la "intercalacion" del


nuevo servidor es
distinta a la del antiguo. He realizado un backup y he


restaurado la
informacion y no he tenido ningun problema a la hora de


realizar la
restauracion pero si he tenido problemas a la hora de


ejecutar algunos
procedimientos almacenados. He cambiado la intercalacion


a la antigua BD con
la del nuevo servidor pero el problema persiste. Que


consejos me pueden dar
al respecto?, algun comentario sugerencia? si necesitan


mas informacion solo
haganmelo saber.

Gracias anticipadamente

Victor Rafael Bocanegra Arias
Barreda Moller
Lima, Peru


.

Respuesta Responder a este mensaje
#7 Víctor Rafael Bocanegra Arias
02/03/2004 - 15:01 | Informe spam
Ya revisé el script. No lo he probado aun, pero tengo un 'pequeño'
problema es que algunos campos en mi BD son tipo text. He leido la
informacion en los BOL y dice que la instruccion ALTER TABLE alter column,
no funciona con un campo del tipo text. Que puedo hacer? :(

Espero que me puedan seguir ayudando

Gracias

"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:
Gracias por tu respuesta Ulises. Exacto, eso es lo que debe estar


sucediendo
voy a el link que me has mandado y luego te aviso.

Gracias de nuevo por tu respuesta.

Salu2

Victor Rafael Bocanegra Arias
Barreda Moller
Lima, Peru

"ulises" escribió en el mensaje
news:4d1201c3ffea$617d2f10$
Hola Victor,

A pesar de haber cambiado el collation de la base de datos
deben seguir persistiendo el collation definido a nivel de
tablas y columnas y eso solo lo puedes modificar con un
ALTER. En este URL http://www.freevbcode.com/ShowCode.asp?
IDT48 figura código en VB .NET que te permite cambiar el
collation para toda la base de datos, revisalo a ver si te
ayuda, o si tu base de datos no es muy grande tal vez sea
más seguro hacerlo manualmente.

Saludos,
Ulises

>Hola grupo, les escribo para ver si me pueden ayudar con
un problema que se
>me ha presentado. Estamos migrando de Servidor y a la
hora de migrar la
>informacion me he dado cuenta que la "intercalacion" del
nuevo servidor es
>distinta a la del antiguo. He realizado un backup y he
restaurado la
>informacion y no he tenido ningun problema a la hora de
realizar la
>restauracion pero si he tenido problemas a la hora de
ejecutar algunos
>procedimientos almacenados. He cambiado la intercalacion
a la antigua BD con
>la del nuevo servidor pero el problema persiste. Que
consejos me pueden dar
>al respecto?, algun comentario sugerencia? si necesitan
mas informacion solo
>haganmelo saber.
>
>Gracias anticipadamente
>
>Victor Rafael Bocanegra Arias
>Barreda Moller
>Lima, Peru
>
>
>.
>


Respuesta Responder a este mensaje
#8 Edward Gasca - BIC Colombia
03/03/2004 - 17:39 | Informe spam
oye intenté este store pero creo que falta esta funcion

COMUN.DBO.FNC_BIT_UNO

es esto cierto??


"Antonio Zorita" escribió en el mensaje
news:555601c4005b$063d6f90$
¿Qué hay?

Crea este procedimiento almacenado y ejecutalo sobre la BD
que quieras cambiar. Funciona bastante bien, y controla
toda la cuestión de indices, dependencias, etc...

Que te aproveche.


CREATE PROCEDURE dbo.REPARACOLLATE AS

select S.*
into ##temp1
from syscolumns S
INNER JOIN SYSOBJECTS O
ON O.ID = S.ID AND O.XTYPE <> 'S'
AND COMUN.DBO.FNC_BIT_UNO
(O.SYSSTAT, 14) = 0
AND O.UID = 1
where collationid <> 61480


SELECT O.ID ID_TABLA, O.NAME Tabla, I.indid INDICE, LEFT
(I.name, 30) NombreIndice, keyno ORDEN, LEFT(CO.NAME, 40)
CAMPO
into ##temp2-- , c.*, CO.*
FROM sysindexes I
INNER JOIN SYSOBJECTS O
ON O.ID = I.ID
AND O.XTYPE = 'U'
AND O.UID = 1
INNER JOIN sysindexkeys C
ON C.ID = O.ID
AND C.INDID = I.INDID
INNER JOIN SYSCOLUMNS CO
ON CO.ID = O.ID
AND CO.colid = C.COLID

WHERE I.NAME NOT LIKE '[_]%'
ORDER BY O.NAME, I.indid, keyno --CO.colid

dar problemas con el collate
select *
into ##temp3
from ##temp2 t2
inner join ##temp1 t1
on T2.ID_TABLA = T1.ID AND t2.campo = t1.name

conflictos EN TEMP4

SELECT DISTINCT OI.XTYPE, O.NAME Tabla, I.indid INDICE,
LEFT(I.name, 30) NombreIndice, keyno ORDEN, LEFT(CO.NAME,
40) CAMPO,
I.STATUS, I.ORIGFILLFACTOR
INTO ##TEMP4-- , c.*, CO.*
FROM sysindexes I
LEFT JOIN SYSOBJECTS OI
ON OI.NAME = I.NAME
INNER JOIN SYSOBJECTS O
ON O.ID = I.ID
AND O.XTYPE = 'U'
AND O.UID = 1
INNER JOIN sysindexkeys C
ON C.ID = O.ID
AND C.INDID = I.INDID
INNER JOIN SYSCOLUMNS CO
ON CO.ID = O.ID
AND CO.colid = C.COLID
inner join ##temp3 t3
on t3.tabla = o.name and
t3.nombreindice = i.name

WHERE I.NAME NOT LIKE '[_]%'
ORDER BY O.NAME, I.indid, keyno

DECLARE @SBORRA VARCHAR(2500)
DECLARE @SCREAINDICE VARCHAR(2550)
DECLARE @TABLA VARCHAR(250)
DECLARE @INDACTUAL VARCHAR(250)
DECLARE @TBLACTUAL VARCHAR(250)
DECLARE @INDICE SMALLINT
DECLARE @NOMBREINDICE VARCHAR(250)
DECLARE @CAMPO VARCHAR(250)
DECLARE @STATUS INT
DECLARE @ORIGFILLFACTOR INT
DECLARE @ESTADO INT
DECLARE @RELLENO INT
DECLARE @WITH VARCHAR(7)

CREATE TABLE ##CREABORRAINDICES (BORRA VARCHAR(2550), CREA
VARCHAR(2550))


QUE NO SEAN CLAVE PRIMARIA
DECLARE C_INDICES CURSOR FOR
SELECT TABLA,INDICE,NOMBREINDICE,CAMPO,
STATUS, ORIGFILLFACTOR
FROM ##TEMP4
WHERE XTYPE <> 'PK' or xtype is null
ORDER BY TABLA,NOMBREINDICE,ORDEN

OPEN C_INDICES

FETCH NEXT FROM C_INDICES INTO @TABLA, @INDICE,
@NOMBREINDICE, @CAMPO, @STATUS, @ORIGFILLFACTOR

INDICES
WHILE @@FETCH_STATUS = 0
BEGIN
SET @WITH = ' WITH '
SET @ESTADO = @STATUS
SET @RELLENO = @ORIGFILLFACTOR
SET @SCREAINDICE = 'CREATE '
IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 2) = 1
SET @SCREAINDICE = @SCREAINDICE
+ 'UNIQUE '
IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 5) = 1
SET @SCREAINDICE = @SCREAINDICE
+ 'CLUSTERED '
SET @SCREAINDICE = @SCREAINDICE + 'INDEX
[' + RTRIM(@NOMBREINDICE) + '] ON [' + RTRIM(@TABLA) + ']
( '

SET @INDACTUAL = @NOMBREINDICE
SET @TBLACTUAL = @TABLA

IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 2) = 1
AND COMUN.DBO.FNC_BIT_UNO(@ESTADO, 13) = 1
SET @SBORRA = 'ALTER TABLE [' +
RTRIM(@TABLA) + '] DROP CONSTRAINT [' + RTRIM
(@NOMBREINDICE) + ']'
ELSE
SET @SBORRA ='DROP INDEX [' + RTRIM
(@TABLA) + '].[' + RTRIM(@NOMBREINDICE) + ']'

WHILE @TBLACTUAL = @TABLA AND @INDACTUAL @NOMBREINDICE AND @@FETCH_STATUS = 0
BEGIN
SET @SCREAINDICE = @SCREAINDICE +
@CAMPO
FETCH NEXT FROM C_INDICES INTO
@TABLA, @INDICE, @NOMBREINDICE, @CAMPO, @STATUS,
@ORIGFILLFACTOR
IF @@FETCH_STATUS <> 0
SET @SCREAINDICE @SCREAINDICE + ')'
ELSE
IF (@INDACTUAL = @NOMBREINDICE
AND @TBLACTUAL = @TABLA)
SET @SCREAINDICE @SCREAINDICE + ', '
ELSE
SET @SCREAINDICE @SCREAINDICE + ')'

END
IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 1) = 1
BEGIN
SET @SCREAINDICE = @SCREAINDICE
+ ' WITH IGNORE_DUP_KEY '
SET @WITH = ', '
END
IF @RELLENO <> 0
BEGIN
SET @SCREAINDICE = @SCREAINDICE +
@WITH + 'FILLFACTOR = ' + CONVERT(VARCHAR, @RELLENO) + ' '
SET @WITH = ', '
END
IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 9) = 1
BEGIN
SET @SCREAINDICE = @SCREAINDICE +
@WITH + 'PAD_INDEX '
SET @WITH = ', '
END
IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 25) = 1
BEGIN
SET @SCREAINDICE = @SCREAINDICE +
@WITH + 'STATISTICS_NORECOMPUTE '
SET @WITH = ', '
END

INSERT INTO ##CREABORRAINDICES VALUES
(@SBORRA, @SCREAINDICE)

END
CLOSE C_INDICES
DEALLOCATE C_INDICES

CLAVE PRIMARIA
DECLARE C_INDICESPK CURSOR FOR
SELECT TABLA,INDICE,NOMBREINDICE,CAMPO,
STATUS, ORIGFILLFACTOR
FROM ##TEMP4
WHERE XTYPE = 'PK'
ORDER BY NOMBREINDICE,ORDEN

OPEN C_INDICESPK

FETCH NEXT FROM C_INDICESPK INTO @TABLA, @INDICE,
@NOMBREINDICE, @CAMPO, @STATUS, @ORIGFILLFACTOR

INDICES
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SCREAINDICE = 'ALTER TABLE [' + RTRIM
(@TABLA) + '] ADD CONSTRAINT [' + RTRIM(@NOMBREINDICE)
+ '] PRIMARY KEY '
IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 5) = 1
SET @SCREAINDICE = @SCREAINDICE
+ ' CLUSTERED '
SET @SCREAINDICE = @SCREAINDICE + ' ( '
SET @INDACTUAL = @NOMBREINDICE
SET @TBLACTUAL = @TABLA
SET @SBORRA ='ALTER TABLE [' + RTRIM
(@TABLA) + '] DROP CONSTRAINT [' + @NOMBREINDICE + ']'
WHILE @TBLACTUAL = @TABLA AND @INDACTUAL @NOMBREINDICE AND @@FETCH_STATUS = 0
BEGIN
SET @SCREAINDICE = @SCREAINDICE +
@CAMPO
FETCH NEXT FROM C_INDICESPK INTO
@TABLA, @INDICE, @NOMBREINDICE, @CAMPO, @STATUS,
@ORIGFILLFACTOR
IF @@FETCH_STATUS <> 0
SET @SCREAINDICE @SCREAINDICE + ')'
ELSE
BEGIN
IF (@INDACTUAL = @NOMBREINDICE
AND @TBLACTUAL = @TABLA)
SET @SCREAINDICE @SCREAINDICE + ', '
ELSE
SET @SCREAINDICE @SCREAINDICE + ')'
END

END
INSERT INTO ##CREABORRAINDICES VALUES
(@SBORRA, @SCREAINDICE)

END
CLOSE C_INDICESPK
DEALLOCATE C_INDICESPK




select distinct o0.name nombreforeign, o1.name tabla1,
o2.name tabla2, c.name campo_t1, c2.name campo_t2,
o0.STATUS, f.*
into ##temp5
from sysforeignkeys f
inner join ##temp1 t
on f.fkeyid = t.id or
f.rkeyid = t.id
inner join sysobjects o0
on o0.id = f.constid
AND o0.UID = 1
inner join sysobjects o1
on o1.id = fkeyid
AND O1.XTYPE = 'U'
AND O1.UID = 1
inner join sysobjects o2
on o2.id = rkeyid
inner join syscolumns c
on c.id = fkeyid
and c.colid = fkey
inner join syscolumns c2
on c2.id = rkeyid
and c2.colid = rkey
order by nombreforeign,keyno



DECLARE @SBORRAFOREIGN VARCHAR(2550)
DECLARE @SCREAFOREIGN VARCHAR(2550)
DECLARE @PARTE2 VARCHAR(2550)
DECLARE @TABLA1 VARCHAR(250)
DECLARE @TABLA2 VARCHAR(250)
DECLARE @FRNACTUAL VARCHAR(250)
DECLARE @FOREIGN SMALLINT
DECLARE @NOMBREFOREIGN VARCHAR(250)
DECLARE @CAMPOT1 VARCHAR(250)
DECLARE @CAMPOT2 VARCHAR(250)
DECLARE @KEYNO SMALLINT
DECLARE @TABLA_INI VARCHAR(250)


CREATE TABLE ##CREABORRAFOREIGN (BORRA VARCHAR(2550), CREA
VARCHAR(2550))


DECLARE C_FOREIGNS CURSOR FOR
SELECT
NOMBREFOREIGN,TABLA1,TABLA2,CAMPO_T1,CAMPO_T2,KEYNO
, STATUS
FROM ##TEMP5
ORDER BY NOMBREFOREIGN,KEYNO

OPEN C_FOREIGNS

FETCH NEXT FROM C_FOREIGNS INTO @NOMBREFOREIGN,
@TABLA1, @TABLA2, @CAMPOT1, @CAMPOT2, @KEYNO, @STATUS

INDICES
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ESTADO = @STATUS
SET @TABLA_INI = @TABLA1
SET @SCREAFOREIGN = 'ALTER TABLE [' + RTRIM
(@TABLA1) + '] ADD CONSTRAINT [' + RTRIM(@NOMBREFOREIGN)
+ '] FOREIGN KEY ( '
SET @PARTE2 = 'REFERENCES [' + RTRIM
(@TABLA2) + '] ( '
SET @FRNACTUAL = @NOMBREFOREIGN
SET @SBORRAFOREIGN ='ALTER TABLE [' + RTRIM
(@TABLA1) + '] DROP CONSTRAINT [' + @NOMBREFOREIGN + ']'
WHILE @FRNACTUAL = @NOMBREFOREIGN AND
@@FETCH_STATUS = 0
BEGIN
SET @SCREAFOREIGN = @SCREAFOREIGN
+ @CAMPOT1
SET @PARTE2 = @PARTE2 + @CAMPOT2
FETCH NEXT FROM C_FOREIGNS INTO
@NOMBREFOREIGN, @TABLA1, @TABLA2, @CAMPOT1, @CAMPOT2,
@KEYNO, @STATUS
IF @@FETCH_STATUS <> 0
BEGIN
SET @SCREAFOREIGN @SCREAFOREIGN + ' )'
SET @PARTE2= @PARTE2
+ ' )'
SET @SCREAFOREIGN @SCREAFOREIGN + @PARTE2
END
ELSE
BEGIN
IF @FRNACTUAL @NOMBREFOREIGN
BEGIN
SET @SCREAFOREIGN
= @SCREAFOREIGN + ', '
SET @PARTE2 @PARTE2 + ', '
END
ELSE
BEGIN
SET @SCREAFOREIGN
= @SCREAFOREIGN + ')'
SET @PARTE2 @PARTE2 + ' )'
SET @SCREAFOREIGN
= @SCREAFOREIGN + @PARTE2
END
END

END

IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 13) = 1
SET @SCREAFOREIGN = @SCREAFOREIGN
+ ' ON DELETE CASCADE '

IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 14) = 1
SET @SCREAFOREIGN = @SCREAFOREIGN
+ ' ON UPDATE CASCADE '

IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 11) = 1
SET @SCREAFOREIGN = @SCREAFOREIGN
+ ' NOT FOR REPLICATION '

IF COMUN.DBO.FNC_BIT_UNO(@ESTADO, 9) = 1
SET @SCREAFOREIGN = @SCREAFOREIGN
+ ' ALTER TABLE ' + @TABLA_INI + ' NOCHECK CONSTRAINT ' +
@FRNACTUAL
ELSE
SET @SCREAFOREIGN = @SCREAFOREIGN
+ ' ALTER TABLE ' + @TABLA_INI + ' CHECK CONSTRAINT ' +
@FRNACTUAL

INSERT INTO ##CREABORRAFOREIGN VALUES
(@SBORRAFOREIGN, @SCREAFOREIGN)

END
CLOSE C_FOREIGNS
DEALLOCATE C_FOREIGNS





DECLARE @SBORRAINDICE VARCHAR(2550)

DECLARE @SNOMBRE VARCHAR(250)
DECLARE @STIPO VARCHAR(3)

DECLARE C_FOREIGNS CURSOR FOR
SELECT * FROM ##CREABORRAFOREIGN

OPEN C_FOREIGNS

FETCH NEXT FROM C_FOREIGNS INTO @SBORRAFOREIGN,
@SCREAFOREIGN
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @SBORRAFOREIGN
EXEC (@SBORRAFOREIGN)
FETCH NEXT FROM C_FOREIGNS INTO @SBORRAFOREIGN,
@SCREAFOREIGN
END

CLOSE C_FOREIGNS
DEALLOCATE C_FOREIGNS



DECLARE C_INDICES CURSOR FOR
SELECT * FROM ##CREABORRAINDICES

OPEN C_INDICES

FETCH NEXT FROM C_INDICES INTO @SBORRAINDICE,
@SCREAINDICE
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @SBORRAINDICE
EXEC (@SBORRAINDICE)
FETCH NEXT FROM C_INDICES INTO @SBORRAINDICE,
@SCREAINDICE
END

CLOSE C_INDICES
DEALLOCATE C_INDICES


UPDATE SYSCOLUMNS SET COLLATIONID = 61480
WHERE COLLATIONID <> NULL OR COLLATIONID <> 61480


DECLARE C_INDICES CURSOR FOR
SELECT * FROM ##CREABORRAINDICES

OPEN C_INDICES

FETCH NEXT FROM C_INDICES INTO @SBORRAINDICE,
@SCREAINDICE
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @SCREAINDICE
EXEC (@SCREAINDICE)
FETCH NEXT FROM C_INDICES INTO @SBORRAINDICE,
@SCREAINDICE
END

CLOSE C_INDICES
DEALLOCATE C_INDICES


DECLARE C_FOREIGNS CURSOR FOR
SELECT * FROM ##CREABORRAFOREIGN

OPEN C_FOREIGNS

FETCH NEXT FROM C_FOREIGNS INTO @SBORRAFOREIGN,
@SCREAFOREIGN
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @SCREAFOREIGN
EXEC (@SCREAFOREIGN)
FETCH NEXT FROM C_FOREIGNS INTO @SBORRAFOREIGN,
@SCREAFOREIGN
END

CLOSE C_FOREIGNS
DEALLOCATE C_FOREIGNS



DECLARE C_RECOMPILAR CURSOR FOR
SELECT [NAME],TYPE FROM SYSOBJECTS
WHERE TYPE = 'P' OR TYPE = 'V' OR TYPE
= 'TR'

OPEN C_RECOMPILAR

FETCH NEXT FROM C_RECOMPILAR INTO @SNOMBRE, @STIPO
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SNOMBRE = RTRIM(@SNOMBRE)
EXEC ('SP_RECOMPILE [' + @SNOMBRE + ']')
FETCH NEXT FROM C_RECOMPILAR INTO @SNOMBRE, @STIPO
END

CLOSE C_RECOMPILAR
DEALLOCATE C_RECOMPILAR

DROP TABLE ##TEMP1
DROP TABLE ##TEMP2
DROP TABLE ##TEMP3
DROP TABLE ##TEMP4
DROP TABLE ##TEMP5
DROP TABLE ##CREABORRAINDICES
DROP TABLE ##CREABORRAFOREIGN
GO
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida