Replicación con nombres de tabla con espacios

21/03/2005 - 11:17 por Rafael Blanco | Informe spam
¿Ha probado alguien a hacer una replicación transaccional de tablas que
contengan espacios en el nombre? Es de risa, no funciona ni a la de tres.
El sistema genera tres procedimientos almacenados por cada articulo para
realizar las inserciones, actualizaciones y borrados. Para nombrarlos, añade
un prefijo al nombre de la base de datos. Por ejemplo, para las inserciones
convierte Cliente en sp_MSins_Cliente.
El problema aparece cuando el nombre de la tabla contiene espacios o algún
carácter especial (con dos guiones es muy divertido --). Durante la
replicación los comandos generados contienen llamadas a dichos
procedimientos, como no le agregan delimitadores, supone que se trata de dos
o más identificadores (separados por espacios) y devuelve un error de
sintaxis.
La referencia a este error (con guiones supone que el resto de la línea es
un comentario...) la podéis encontrar en la web de Microsoft:
http://support.microsoft.com/?id06608. Fijaos en la fecha, desde hace año y
medio; y por supuesto, sin solucionar.
Por cierto, la solución que dan es estupenda, cambiar el nombre de las
tablas, voy a llamar ahora mismo a Navision para que me cambien el nombre de
las 1600 tablas que tiene mi base de datos que no me gustan los nombres,
seguro que están encantados de ponerse a ello. De hecho, supongo que ya
estarán haciéndolo ahora que lo compró Microsoft :-)

Bueno gracias a todos, si alguien sabe alguna solución (alguna que funcione)
le estaré muy agradecido. Tened en cuenta que en la replicación transaccional
con ACTUALIZACIÓN EN COLA no se le puede especificar manualmente el nombre de
los procedimientos almacenados de los que estamos hablando.
Gracias, gracias, gracias.

Preguntas similare

Leer las respuestas

#1 Eladio Rincón
21/03/2005 - 15:34 | Informe spam
Hola Rafael,

no se si está en la lista de problemas solucionados en SP4 (que está en
beta)
http://support.microsoft.com/kb/888799/en-us

Sin embargo, podrías crear vistas indexadas sobre las tablas que quieres
replicar, y construir la replicación sobre las vistas.

Eladio Rincón
SQL Server MVP

Solid Quality Learning (http://www.solidqualitylearning.com)
"Comparte lo que sabes, aprende lo que no sepas", FGG

Consulte el histórico del grupo en Google
http://groups.google.com/groups?gro....sqlserver

¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Rafael Blanco" wrote in message
news:
¿Ha probado alguien a hacer una replicación transaccional de tablas que
contengan espacios en el nombre? Es de risa, no funciona ni a la de tres.
El sistema genera tres procedimientos almacenados por cada articulo para
realizar las inserciones, actualizaciones y borrados. Para nombrarlos,


añade
un prefijo al nombre de la base de datos. Por ejemplo, para las


inserciones
convierte Cliente en sp_MSins_Cliente.
El problema aparece cuando el nombre de la tabla contiene espacios o algún
carácter especial (con dos guiones es muy divertido --). Durante la
replicación los comandos generados contienen llamadas a dichos
procedimientos, como no le agregan delimitadores, supone que se trata de


dos
o más identificadores (separados por espacios) y devuelve un error de
sintaxis.
La referencia a este error (con guiones supone que el resto de la línea es
un comentario...) la podéis encontrar en la web de Microsoft:
http://support.microsoft.com/?id06608. Fijaos en la fecha, desde hace


año y
medio; y por supuesto, sin solucionar.
Por cierto, la solución que dan es estupenda, cambiar el nombre de las
tablas, voy a llamar ahora mismo a Navision para que me cambien el nombre


de
las 1600 tablas que tiene mi base de datos que no me gustan los nombres,
seguro que están encantados de ponerse a ello. De hecho, supongo que ya
estarán haciéndolo ahora que lo compró Microsoft :-)

Bueno gracias a todos, si alguien sabe alguna solución (alguna que


funcione)
le estaré muy agradecido. Tened en cuenta que en la replicación


transaccional
con ACTUALIZACIÓN EN COLA no se le puede especificar manualmente el nombre


de
los procedimientos almacenados de los que estamos hablando.
Gracias, gracias, gracias.

Respuesta Responder a este mensaje
#2 Miguel Egea
22/03/2005 - 00:28 | Informe spam
Buenas, en las tablas de sincronización si mal no recuerdo (te hablo de
memoria) hay una tabla sysarticles, en esa tabla está el comando que debe
ejecutarse, algo así como call sp_ms_upd_tutabla, si cambias eso por lo
mismo con [], algo así como call [sp_ms_upd_ll] no deberías tener
problema, verás que esto no falla y si mal no recuerdo si haces esto que te
digo tampoco..
create table [hola--hola] (id int)
go
select * from [hola--hola]

Ya nos cuentas.

-
Miguel Egea Gómez
Microsoft SQL-Server MVP, MCSD, MCAD,MCT
Webmaster de PortalSql.Com
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Eladio Rincón" escribió en el mensaje
news:
Hola Rafael,

no se si está en la lista de problemas solucionados en SP4 (que está en
beta)
http://support.microsoft.com/kb/888799/en-us

Sin embargo, podrías crear vistas indexadas sobre las tablas que quieres
replicar, y construir la replicación sobre las vistas.

Eladio Rincón
SQL Server MVP

Solid Quality Learning (http://www.solidqualitylearning.com)
"Comparte lo que sabes, aprende lo que no sepas", FGG

Consulte el histórico del grupo en Google
http://groups.google.com/groups?gro....sqlserver

¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Rafael Blanco" wrote in message
news:
¿Ha probado alguien a hacer una replicación transaccional de tablas que
contengan espacios en el nombre? Es de risa, no funciona ni a la de tres.
El sistema genera tres procedimientos almacenados por cada articulo para
realizar las inserciones, actualizaciones y borrados. Para nombrarlos,


añade
un prefijo al nombre de la base de datos. Por ejemplo, para las


inserciones
convierte Cliente en sp_MSins_Cliente.
El problema aparece cuando el nombre de la tabla contiene espacios o
algún
carácter especial (con dos guiones es muy divertido --). Durante la
replicación los comandos generados contienen llamadas a dichos
procedimientos, como no le agregan delimitadores, supone que se trata de


dos
o más identificadores (separados por espacios) y devuelve un error de
sintaxis.
La referencia a este error (con guiones supone que el resto de la línea
es
un comentario...) la podéis encontrar en la web de Microsoft:
http://support.microsoft.com/?id06608. Fijaos en la fecha, desde hace


año y
medio; y por supuesto, sin solucionar.
Por cierto, la solución que dan es estupenda, cambiar el nombre de las
tablas, voy a llamar ahora mismo a Navision para que me cambien el nombre


de
las 1600 tablas que tiene mi base de datos que no me gustan los nombres,
seguro que están encantados de ponerse a ello. De hecho, supongo que ya
estarán haciéndolo ahora que lo compró Microsoft :-)

Bueno gracias a todos, si alguien sabe alguna solución (alguna que


funcione)
le estaré muy agradecido. Tened en cuenta que en la replicación


transaccional
con ACTUALIZACIÓN EN COLA no se le puede especificar manualmente el
nombre


de
los procedimientos almacenados de los que estamos hablando.
Gracias, gracias, gracias.






Respuesta Responder a este mensaje
#3 Rafael Blanco
22/03/2005 - 16:47 | Informe spam
Demasiado complicado, pretendo realizar la replicación de un base de datos de
Navision. Gracias de todas formas.

"Eladio Rincón" escribió:

Hola Rafael,

no se si está en la lista de problemas solucionados en SP4 (que está en
beta)
http://support.microsoft.com/kb/888799/en-us

Sin embargo, podrías crear vistas indexadas sobre las tablas que quieres
replicar, y construir la replicación sobre las vistas.

Eladio Rincón
SQL Server MVP

Solid Quality Learning (http://www.solidqualitylearning.com)
"Comparte lo que sabes, aprende lo que no sepas", FGG

Consulte el histórico del grupo en Google
http://groups.google.com/groups?gro....sqlserver

¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Rafael Blanco" wrote in message
news:
> ¿Ha probado alguien a hacer una replicación transaccional de tablas que
> contengan espacios en el nombre? Es de risa, no funciona ni a la de tres.
> El sistema genera tres procedimientos almacenados por cada articulo para
> realizar las inserciones, actualizaciones y borrados. Para nombrarlos,
añade
> un prefijo al nombre de la base de datos. Por ejemplo, para las
inserciones
> convierte Cliente en sp_MSins_Cliente.
> El problema aparece cuando el nombre de la tabla contiene espacios o algún
> carácter especial (con dos guiones es muy divertido --). Durante la
> replicación los comandos generados contienen llamadas a dichos
> procedimientos, como no le agregan delimitadores, supone que se trata de
dos
> o más identificadores (separados por espacios) y devuelve un error de
> sintaxis.
> La referencia a este error (con guiones supone que el resto de la línea es
> un comentario...) la podéis encontrar en la web de Microsoft:
> http://support.microsoft.com/?id06608. Fijaos en la fecha, desde hace
año y
> medio; y por supuesto, sin solucionar.
> Por cierto, la solución que dan es estupenda, cambiar el nombre de las
> tablas, voy a llamar ahora mismo a Navision para que me cambien el nombre
de
> las 1600 tablas que tiene mi base de datos que no me gustan los nombres,
> seguro que están encantados de ponerse a ello. De hecho, supongo que ya
> estarán haciéndolo ahora que lo compró Microsoft :-)
>
> Bueno gracias a todos, si alguien sabe alguna solución (alguna que
funcione)
> le estaré muy agradecido. Tened en cuenta que en la replicación
transaccional
> con ACTUALIZACIÓN EN COLA no se le puede especificar manualmente el nombre
de
> los procedimientos almacenados de los que estamos hablando.
> Gracias, gracias, gracias.
>



Respuesta Responder a este mensaje
#4 Rafael Blanco
22/03/2005 - 19:11 | Informe spam
Te cuento...

La raíz del problema no es el nombre de los procedimientos almacenados, sino
los comandos que genera el agente de distribución al realizar la replicación.
En esos comandos, las llamadas a dichos procedimientos se hace de forma
incorrecta. Si el nombre del procedimiento almacenado contiene espacios, lo
cual está permitido, la sentencia provoca un error de sintaxis.

Esto se puede solucionar de dos modos:
1. Renombrando los procedimientos almacenados de forma que no tengan
caracteres "raros"
2. Encerrándolos entre [...]

PERO, en la replicación transaccional con actualizaciones en cola no permite
renombrarlos.

No se si la modificación de la tabla sysarticles, funcionará en otros casos
(modificar las tablas directamente no es nunca muy buena práctica), en el
caso que nos ocupa no. He realizado la prueba y no ha habido suerte.

Si el sistema no permite modificar los nombres es muy posible que sea porque
no deben ser modificados. En mi opinión, con la actualización en cola, ni
siquiera lo tiene en cuenta. El nombre de los procedimientos a usar,
probablemente se generen directamente a partir del nombre de la tabla, en vez
de usar los almacenados en los campos del_cmd, ins_cmd y upd_cmd.

De todas formas, muchas gracias.

Rafa

"Miguel Egea" wrote:

Buenas, en las tablas de sincronización si mal no recuerdo (te hablo de
memoria) hay una tabla sysarticles, en esa tabla está el comando que debe
ejecutarse, algo así como call sp_ms_upd_tutabla, si cambias eso por lo
mismo con [], algo así como call [sp_ms_upd_ll] no deberías tener
problema, verás que esto no falla y si mal no recuerdo si haces esto que te
digo tampoco..
create table [hola--hola] (id int)
go
select * from [hola--hola]

Ya nos cuentas.

-
Miguel Egea Gómez
Microsoft SQL-Server MVP, MCSD, MCAD,MCT
Webmaster de PortalSql.Com
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Eladio Rincón" escribió en el mensaje
news:
> Hola Rafael,
>
> no se si está en la lista de problemas solucionados en SP4 (que está en
> beta)
> http://support.microsoft.com/kb/888799/en-us
>
> Sin embargo, podrías crear vistas indexadas sobre las tablas que quieres
> replicar, y construir la replicación sobre las vistas.
>
> Eladio Rincón
> SQL Server MVP
>
> Solid Quality Learning (http://www.solidqualitylearning.com)
> "Comparte lo que sabes, aprende lo que no sepas", FGG
>
> Consulte el histórico del grupo en Google
> http://groups.google.com/groups?gro....sqlserver
>
> ¿Te interesa participar en las reuniones
> del grupo de Usuarios de SQL-Server y .NET
> Se harán en levante de España, (Alicante o Murcia)?
>
> "Rafael Blanco" wrote in message
> news:
>> ¿Ha probado alguien a hacer una replicación transaccional de tablas que
>> contengan espacios en el nombre? Es de risa, no funciona ni a la de tres.
>> El sistema genera tres procedimientos almacenados por cada articulo para
>> realizar las inserciones, actualizaciones y borrados. Para nombrarlos,
> añade
>> un prefijo al nombre de la base de datos. Por ejemplo, para las
> inserciones
>> convierte Cliente en sp_MSins_Cliente.
>> El problema aparece cuando el nombre de la tabla contiene espacios o
>> algún
>> carácter especial (con dos guiones es muy divertido --). Durante la
>> replicación los comandos generados contienen llamadas a dichos
>> procedimientos, como no le agregan delimitadores, supone que se trata de
> dos
>> o más identificadores (separados por espacios) y devuelve un error de
>> sintaxis.
>> La referencia a este error (con guiones supone que el resto de la línea
>> es
>> un comentario...) la podéis encontrar en la web de Microsoft:
>> http://support.microsoft.com/?id06608. Fijaos en la fecha, desde hace
> año y
>> medio; y por supuesto, sin solucionar.
>> Por cierto, la solución que dan es estupenda, cambiar el nombre de las
>> tablas, voy a llamar ahora mismo a Navision para que me cambien el nombre
> de
>> las 1600 tablas que tiene mi base de datos que no me gustan los nombres,
>> seguro que están encantados de ponerse a ello. De hecho, supongo que ya
>> estarán haciéndolo ahora que lo compró Microsoft :-)
>>
>> Bueno gracias a todos, si alguien sabe alguna solución (alguna que
> funcione)
>> le estaré muy agradecido. Tened en cuenta que en la replicación
> transaccional
>> con ACTUALIZACIÓN EN COLA no se le puede especificar manualmente el
>> nombre
> de
>> los procedimientos almacenados de los que estamos hablando.
>> Gracias, gracias, gracias.
>>
>
>
>




Respuesta Responder a este mensaje
#5 Miguel Egea
22/03/2005 - 21:26 | Informe spam
Efectivamente no es bueno tocar los objetos del sistema, no es una practica
recomendada. Sin embargo en algunas circunstancias no queda otra.
Lamento que no te haya funcionado, habría jurado que yo lo hice con éxito,
pero bueno, el caso es que no ha sido así en tu caso. Tendrías que o bien
seguir la recomendación de eladio con vista indexadas o bien introducir
algun mecanismo de copias los datos para después ser replicados, triggers
por ejemplo. De todas formas como bien comentas eso complica el escenario.

Otra cosa es que hablas d que has montado actualizaciones en msmq, ojo que
eso te añadirá campos de tipo timestamp a tus tablas(o al menos lo
intentara).

Saludos
Miguel Egea

"Rafael Blanco" escribió en el
mensaje news:
Te cuento...

La raíz del problema no es el nombre de los procedimientos almacenados,
sino
los comandos que genera el agente de distribución al realizar la
replicación.
En esos comandos, las llamadas a dichos procedimientos se hace de forma
incorrecta. Si el nombre del procedimiento almacenado contiene espacios,
lo
cual está permitido, la sentencia provoca un error de sintaxis.

Esto se puede solucionar de dos modos:
1. Renombrando los procedimientos almacenados de forma que no tengan
caracteres "raros"
2. Encerrándolos entre [...]

PERO, en la replicación transaccional con actualizaciones en cola no
permite
renombrarlos.

No se si la modificación de la tabla sysarticles, funcionará en otros
casos
(modificar las tablas directamente no es nunca muy buena práctica), en el
caso que nos ocupa no. He realizado la prueba y no ha habido suerte.

Si el sistema no permite modificar los nombres es muy posible que sea
porque
no deben ser modificados. En mi opinión, con la actualización en cola, ni
siquiera lo tiene en cuenta. El nombre de los procedimientos a usar,
probablemente se generen directamente a partir del nombre de la tabla, en
vez
de usar los almacenados en los campos del_cmd, ins_cmd y upd_cmd.

De todas formas, muchas gracias.

Rafa

"Miguel Egea" wrote:

Buenas, en las tablas de sincronización si mal no recuerdo (te hablo de
memoria) hay una tabla sysarticles, en esa tabla está el comando que debe
ejecutarse, algo así como call sp_ms_upd_tutabla, si cambias eso por
lo
mismo con [], algo así como call [sp_ms_upd_ll] no deberías tener
problema, verás que esto no falla y si mal no recuerdo si haces esto que
te
digo tampoco..
create table [hola--hola] (id int)
go
select * from [hola--hola]

Ya nos cuentas.

-
Miguel Egea Gómez
Microsoft SQL-Server MVP, MCSD, MCAD,MCT
Webmaster de PortalSql.Com
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Eladio Rincón" escribió en el mensaje
news:
> Hola Rafael,
>
> no se si está en la lista de problemas solucionados en SP4 (que está en
> beta)
> http://support.microsoft.com/kb/888799/en-us
>
> Sin embargo, podrías crear vistas indexadas sobre las tablas que
> quieres
> replicar, y construir la replicación sobre las vistas.
>
> Eladio Rincón
> SQL Server MVP
>
> Solid Quality Learning (http://www.solidqualitylearning.com)
> "Comparte lo que sabes, aprende lo que no sepas", FGG
>
> Consulte el histórico del grupo en Google
> http://groups.google.com/groups?gro....sqlserver
>
> ¿Te interesa participar en las reuniones
> del grupo de Usuarios de SQL-Server y .NET
> Se harán en levante de España, (Alicante o Murcia)?
>
> "Rafael Blanco" wrote in
> message
> news:
>> ¿Ha probado alguien a hacer una replicación transaccional de tablas
>> que
>> contengan espacios en el nombre? Es de risa, no funciona ni a la de
>> tres.
>> El sistema genera tres procedimientos almacenados por cada articulo
>> para
>> realizar las inserciones, actualizaciones y borrados. Para nombrarlos,
> añade
>> un prefijo al nombre de la base de datos. Por ejemplo, para las
> inserciones
>> convierte Cliente en sp_MSins_Cliente.
>> El problema aparece cuando el nombre de la tabla contiene espacios o
>> algún
>> carácter especial (con dos guiones es muy divertido --). Durante la
>> replicación los comandos generados contienen llamadas a dichos
>> procedimientos, como no le agregan delimitadores, supone que se trata
>> de
> dos
>> o más identificadores (separados por espacios) y devuelve un error de
>> sintaxis.
>> La referencia a este error (con guiones supone que el resto de la
>> línea
>> es
>> un comentario...) la podéis encontrar en la web de Microsoft:
>> http://support.microsoft.com/?id06608. Fijaos en la fecha, desde
>> hace
> año y
>> medio; y por supuesto, sin solucionar.
>> Por cierto, la solución que dan es estupenda, cambiar el nombre de las
>> tablas, voy a llamar ahora mismo a Navision para que me cambien el
>> nombre
> de
>> las 1600 tablas que tiene mi base de datos que no me gustan los
>> nombres,
>> seguro que están encantados de ponerse a ello. De hecho, supongo que
>> ya
>> estarán haciéndolo ahora que lo compró Microsoft :-)
>>
>> Bueno gracias a todos, si alguien sabe alguna solución (alguna que
> funcione)
>> le estaré muy agradecido. Tened en cuenta que en la replicación
> transaccional
>> con ACTUALIZACIÓN EN COLA no se le puede especificar manualmente el
>> nombre
> de
>> los procedimientos almacenados de los que estamos hablando.
>> Gracias, gracias, gracias.
>>
>
>
>







email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida