![]() |
| |||||||
| Registrarse | Preguntas Frecuentes | Lista de Foreros | Calendario | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
| | LinkBack | Herramientas | Desplegado |
| |||
| Tengo dos servidores Dell (uno con Win2k Server, y otro con Win 2003 R2 server, ambos con sus service pack respectivo), los dos tienen instalado Sql2000 Standard Edition Service Pack 4, los dos servidores estan en diferentes cuidades, en uno de ellos se corre un sistema de pedidos. El caso es que me piden que la informacion de este servidor se pase al de la otra cuidad (Win 2003 R2 server, donde se encuentra la administracion), ya que quieren ver los datos lo mas en linea que se pueda, sin embargo me comentan tambien que han tenido no muy buenas experiencias con el replicador de Sql, por lo que me pidieron que usara otra cosa (aparte que nunca he implementado un replicador), he pensado en servidores vinculados (ya que en la cuidad donde llegaran los datos, existe algo que hace las veces de una ip publica), de forma que si tengo coneccion de un lado hacia el otro (pero no hacia ambos lados). Mi pregunta es, hay alguna forma de implementar esta situacion de forma mas o menos simple ? Ya que lo que se me ocurre son procedimientos almacenados que hagan las veces de triggers (es decir que estos SP pasen los datos de un servidor al otro), y que se ejecuten cada digamos media hora o 1 hora, pero esto significaria tener que hacer a mano todos los "INSERT, UPDATE y DELETE" de cada una de las tablas con sus respectivos campos, Ejemplo: -- Aqui van los DECLARE para cada campo DECLARE ***Status char(1) -- <-- Ejemplo DECLARE ***Campo1 int -- etc, etc. /* Agrega/Cambia/Borra registros en el servidor remoto segun el campo Status del servidor Local */ DECLARE FLE_ABC CURSOR FOR SELECT [Campos] FROM [Tabla] WHERE ISNULL(STATUS, 'A') <> 'P' -- 'P' de Procesado OPEN FLE_ABC FETCH NEXT FROM FLE_ABC INTO [***Variables] WHILE ******FETCH_STATUS = 0 BEGIN --SET XACT_ABORT ON --BEGIN TRANSACTION ABC_Datos IF (***Status = 'A') OR (***Status = 'B') OR (***Status = 'C') -- 'A'=Alta, 'B'=Baja, 'C'=Cambio, solo los registros que no esten procesados (Status<>'P'). BEGIN IF (***Status = 'A') OR (***Status = 'C') BEGIN IF EXISTS(SELECT * FROM [ServidorRemoto].[DbRemota].dbo.[TablaRemota] WHERE [Campo] = [***Variable]) -- Si ya existe el registro en el servidor remoto, solo lo actualiza BEGIN UPDATE [ServidorRemoto].[DbRemota].dbo.[TablaRemota] SET [Campo1]=[***Variable1], [Campo2]=[***Variable2] WHERE [Campo] = [***Variable] -- Y asi con todos lo campos de la tabla END ELSE -- Si no existe el registro en el servidor remoto, lo agrega BEGIN INSERT INTO [ServidorRemoto].[DbRemota].dbo.[TablaRemota] ([Campo1], [Campo2]) VALUES([***Variable1], [***Variable2]) END END ELSE BEGIN DELETE FROM [ServidorRemoto].[DbRemota].dbo.[TablaRemota] WHERE [Campo] = [***Variable] END END --COMMIT TRANSACTION ABC_Datos FETCH NEXT FROM FLE_ABC INTO [***Variables] END CLOSE FLE_ABC DEALLOCATE FLE_ABC Despues de esto se ejecutaria otro procedimiento almacenado (u otro proceso dentro de este mismo SP) que ponga el campo Status = 'P', segun localize o no los registros en la Db del servidor remoto. Esto como dije significa que debo hacer algo asi, para cada tabla (son como 50), aparte de agregar un campo de status a cada tabla. No existe algo en Sql, para dar de alta/modificar el registro completo sin tener que entrar en detalle de especificar cada campo (como es el caso del insert, o update) ? Alguien tiene una idea sin tener que usar replicacion (ya que esa fue la sugerencia que me hicieron[no usar replicacion]) ? Si quieren mas informacion con gusto la proporciono. Espero haber explicado bien la problematica. Cualquier idea es bienvenida. Gracias de antemano. Saludos. |
| | ||||
| ||||
| |
| |||
| Hola Te recomendaria usar DTS y asi verifiques los medios de tranferencia de estos servidores y uses SQL TASk para poder empotrar las clausulas que no permitan datos repetidas y mantegas la integridad de la BD, el escenario de agentes de replicacion es el mas recomendado con el modelo publicados y suscriptor!! pero debes d etener uan buena arquitectura de comunicaciones!!! Saludos Cordiales. Juan Carlos Inestroza Lozano. "Alr'" wrote: > Tengo dos servidores Dell (uno con Win2k Server, y otro con Win 2003 R2 > server, ambos con sus service pack respectivo), los dos tienen instalado > Sql2000 Standard Edition > Service Pack 4, los dos servidores estan en diferentes cuidades, en uno de > ellos se corre un sistema de pedidos. El caso es que me piden que la > informacion de este servidor > se pase al de la otra cuidad (Win 2003 R2 server, donde se encuentra la > administracion), ya que quieren ver los datos lo mas en linea que se pueda, > sin embargo me comentan > tambien que han tenido no muy buenas experiencias con el replicador de Sql, > por lo que me pidieron que usara otra cosa (aparte que nunca he implementado > un replicador), he > pensado en servidores vinculados (ya que en la cuidad donde llegaran los > datos, existe algo que hace las veces de una ip publica), de forma que si > tengo coneccion de un lado > hacia el otro (pero no hacia ambos lados). > Mi pregunta es, hay alguna forma de implementar esta situacion de forma mas > o menos simple ? > Ya que lo que se me ocurre son procedimientos almacenados que hagan las > veces de triggers (es decir que estos SP pasen los datos de un servidor al > otro), y que se ejecuten cada > digamos media hora o 1 hora, pero esto significaria tener que hacer a mano > todos los "INSERT, UPDATE y DELETE" de cada una de las tablas con sus > respectivos campos, Ejemplo: > > -- Aqui van los DECLARE para cada campo > DECLARE ***Status char(1) -- <-- Ejemplo > DECLARE ***Campo1 int -- etc, etc. > > /* Agrega/Cambia/Borra registros en el servidor remoto segun el campo Status > del servidor Local */ > DECLARE FLE_ABC CURSOR FOR SELECT [Campos] FROM [Tabla] WHERE ISNULL(STATUS, > 'A') <> 'P' -- 'P' de Procesado > OPEN FLE_ABC > FETCH NEXT FROM FLE_ABC INTO [***Variables] > WHILE ******FETCH_STATUS = 0 > BEGIN > --SET XACT_ABORT ON > --BEGIN TRANSACTION ABC_Datos > IF (***Status = 'A') OR (***Status = 'B') OR (***Status = 'C') -- > 'A'=Alta, 'B'=Baja, 'C'=Cambio, solo los registros que no esten procesados > (Status<>'P'). > BEGIN > IF (***Status = 'A') OR (***Status = 'C') > BEGIN > IF EXISTS(SELECT * FROM > [ServidorRemoto].[DbRemota].dbo.[TablaRemota] WHERE [Campo] = > [***Variable]) -- Si ya existe el registro en el servidor remoto, solo lo > actualiza > BEGIN > UPDATE [ServidorRemoto].[DbRemota].dbo.[TablaRemota] > SET [Campo1]=[***Variable1], [Campo2]=[***Variable2] > WHERE [Campo] = [***Variable] -- Y asi con todos lo campos de la tabla > END > ELSE -- Si no existe el registro en el > servidor remoto, lo agrega > BEGIN > INSERT INTO > [ServidorRemoto].[DbRemota].dbo.[TablaRemota] ([Campo1], [Campo2]) > VALUES([***Variable1], [***Variable2]) > END > END > ELSE > BEGIN > DELETE FROM [ServidorRemoto].[DbRemota].dbo.[TablaRemota] > WHERE [Campo] = [***Variable] > END > END > --COMMIT TRANSACTION ABC_Datos > FETCH NEXT FROM FLE_ABC INTO [***Variables] > END > CLOSE FLE_ABC > DEALLOCATE FLE_ABC > > Despues de esto se ejecutaria otro procedimiento almacenado (u otro proceso > dentro de este mismo SP) que ponga el campo Status = 'P', segun localize o > no los registros en la > Db del servidor remoto. > > > Esto como dije significa que debo hacer algo asi, para cada tabla (son como > 50), aparte de agregar un campo de status a cada tabla. > > No existe algo en Sql, para dar de alta/modificar el registro completo sin > tener que entrar en detalle de especificar cada campo (como es el caso del > insert, o update) ? > > Alguien tiene una idea sin tener que usar replicacion (ya que esa fue la > sugerencia que me hicieron[no usar replicacion]) ? > Si quieren mas informacion con gusto la proporciono. > Espero haber explicado bien la problematica. > > Cualquier idea es bienvenida. > > Gracias de antemano. > > Saludos. > > > |
| |||
| Muchas gracias por la respuesta. Tendras alguna pagina o sitio donde pueda ver algun ejemplo o simplemente me doy un clavado a los libros en linea de Sql 2000 ? Saludos. "Juan Carlos Inestroza Lozano" <JuanCarlosInestrozaLozano***discussions.microsoft.c om> wrote in message news:0289B3CF-BA7F-4993-8791-B39FEF06D59C***microsoft.com... > Hola > > Te recomendaria usar DTS y asi verifiques los medios de tranferencia de > estos servidores y uses SQL TASk para poder empotrar las clausulas que no > permitan datos repetidas y mantegas la integridad de la BD, el escenario > de > agentes de replicacion es el mas recomendado con el modelo publicados y > suscriptor!! > > > pero debes d etener uan buena arquitectura de comunicaciones!!! > > Saludos Cordiales. > > > Juan Carlos Inestroza Lozano. > > "Alr'" wrote: > >> Tengo dos servidores Dell (uno con Win2k Server, y otro con Win 2003 R2 >> server, ambos con sus service pack respectivo), los dos tienen instalado >> Sql2000 Standard Edition >> Service Pack 4, los dos servidores estan en diferentes cuidades, en uno >> de >> ellos se corre un sistema de pedidos. El caso es que me piden que la >> informacion de este servidor >> se pase al de la otra cuidad (Win 2003 R2 server, donde se encuentra la >> administracion), ya que quieren ver los datos lo mas en linea que se >> pueda, >> sin embargo me comentan >> tambien que han tenido no muy buenas experiencias con el replicador de >> Sql, >> por lo que me pidieron que usara otra cosa (aparte que nunca he >> implementado >> un replicador), he >> pensado en servidores vinculados (ya que en la cuidad donde llegaran los >> datos, existe algo que hace las veces de una ip publica), de forma que si >> tengo coneccion de un lado >> hacia el otro (pero no hacia ambos lados). >> Mi pregunta es, hay alguna forma de implementar esta situacion de forma >> mas >> o menos simple ? >> Ya que lo que se me ocurre son procedimientos almacenados que hagan las >> veces de triggers (es decir que estos SP pasen los datos de un servidor >> al >> otro), y que se ejecuten cada >> digamos media hora o 1 hora, pero esto significaria tener que hacer a >> mano >> todos los "INSERT, UPDATE y DELETE" de cada una de las tablas con sus >> respectivos campos, Ejemplo: >> >> -- Aqui van los DECLARE para cada campo >> DECLARE ***Status char(1) -- <-- Ejemplo >> DECLARE ***Campo1 int -- etc, etc. >> >> /* Agrega/Cambia/Borra registros en el servidor remoto segun el campo >> Status >> del servidor Local */ >> DECLARE FLE_ABC CURSOR FOR SELECT [Campos] FROM [Tabla] WHERE >> ISNULL(STATUS, >> 'A') <> 'P' -- 'P' de Procesado >> OPEN FLE_ABC >> FETCH NEXT FROM FLE_ABC INTO [***Variables] >> WHILE ******FETCH_STATUS = 0 >> BEGIN >> --SET XACT_ABORT ON >> --BEGIN TRANSACTION ABC_Datos >> IF (***Status = 'A') OR (***Status = 'B') OR (***Status = 'C') -- >> 'A'=Alta, 'B'=Baja, 'C'=Cambio, solo los registros que no esten >> procesados >> (Status<>'P'). >> BEGIN >> IF (***Status = 'A') OR (***Status = 'C') >> BEGIN >> IF EXISTS(SELECT * FROM >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] WHERE [Campo] = >> [***Variable]) -- Si ya existe el registro en el servidor remoto, solo lo >> actualiza >> BEGIN >> UPDATE >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] >> SET [Campo1]=[***Variable1], [Campo2]=[***Variable2] >> WHERE [Campo] = [***Variable] -- Y asi con todos lo campos de la >> tabla >> END >> ELSE -- Si no existe el registro en el >> servidor remoto, lo agrega >> BEGIN >> INSERT INTO >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] ([Campo1], [Campo2]) >> VALUES([***Variable1], [***Variable2]) >> END >> END >> ELSE >> BEGIN >> DELETE FROM >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] >> WHERE [Campo] = [***Variable] >> END >> END >> --COMMIT TRANSACTION ABC_Datos >> FETCH NEXT FROM FLE_ABC INTO [***Variables] >> END >> CLOSE FLE_ABC >> DEALLOCATE FLE_ABC >> >> Despues de esto se ejecutaria otro procedimiento almacenado (u otro >> proceso >> dentro de este mismo SP) que ponga el campo Status = 'P', segun localize >> o >> no los registros en la >> Db del servidor remoto. >> >> >> Esto como dije significa que debo hacer algo asi, para cada tabla (son >> como >> 50), aparte de agregar un campo de status a cada tabla. >> >> No existe algo en Sql, para dar de alta/modificar el registro completo >> sin >> tener que entrar en detalle de especificar cada campo (como es el caso >> del >> insert, o update) ? >> >> Alguien tiene una idea sin tener que usar replicacion (ya que esa fue la >> sugerencia que me hicieron[no usar replicacion]) ? >> Si quieren mas informacion con gusto la proporciono. >> Espero haber explicado bien la problematica. >> >> Cualquier idea es bienvenida. >> >> Gracias de antemano. >> >> Saludos. >> >> >> |
| |||
| Bueno aca te envio unas paginas para ver tema por tema: Implementacion de Replicacion: http://www.monografias.com/trabajos1...on-datos.shtml http://www.microsoft.com/spain/sql/2.../replicat.aspx En cuanto a DTS de SQL Server 2000 te envio estos links de nivel basico a intermedio: http://www.manualespracticos.blogspot.com/ http://support.microsoft.com/default.aspx/kb/242391/es Existe un libro que se llama SQL Server 2000 DTS step by step, o puedes tomar un cursos certificado de SQL Server 2000 como el MOC 2092. Saludos Cordiales. Juan Carlos Inestroza Lozano. "Alr'" wrote: > Muchas gracias por la respuesta. > Tendras alguna pagina o sitio donde pueda ver algun ejemplo o simplemente me > doy un clavado a los > libros en linea de Sql 2000 ? > > Saludos. > > "Juan Carlos Inestroza Lozano" > <JuanCarlosInestrozaLozano***discussions.microsoft.c om> wrote in message > news:0289B3CF-BA7F-4993-8791-B39FEF06D59C***microsoft.com... > > Hola > > > > Te recomendaria usar DTS y asi verifiques los medios de tranferencia de > > estos servidores y uses SQL TASk para poder empotrar las clausulas que no > > permitan datos repetidas y mantegas la integridad de la BD, el escenario > > de > > agentes de replicacion es el mas recomendado con el modelo publicados y > > suscriptor!! > > > > > > pero debes d etener uan buena arquitectura de comunicaciones!!! > > > > Saludos Cordiales. > > > > > > Juan Carlos Inestroza Lozano. > > > > "Alr'" wrote: > > > >> Tengo dos servidores Dell (uno con Win2k Server, y otro con Win 2003 R2 > >> server, ambos con sus service pack respectivo), los dos tienen instalado > >> Sql2000 Standard Edition > >> Service Pack 4, los dos servidores estan en diferentes cuidades, en uno > >> de > >> ellos se corre un sistema de pedidos. El caso es que me piden que la > >> informacion de este servidor > >> se pase al de la otra cuidad (Win 2003 R2 server, donde se encuentra la > >> administracion), ya que quieren ver los datos lo mas en linea que se > >> pueda, > >> sin embargo me comentan > >> tambien que han tenido no muy buenas experiencias con el replicador de > >> Sql, > >> por lo que me pidieron que usara otra cosa (aparte que nunca he > >> implementado > >> un replicador), he > >> pensado en servidores vinculados (ya que en la cuidad donde llegaran los > >> datos, existe algo que hace las veces de una ip publica), de forma que si > >> tengo coneccion de un lado > >> hacia el otro (pero no hacia ambos lados). > >> Mi pregunta es, hay alguna forma de implementar esta situacion de forma > >> mas > >> o menos simple ? > >> Ya que lo que se me ocurre son procedimientos almacenados que hagan las > >> veces de triggers (es decir que estos SP pasen los datos de un servidor > >> al > >> otro), y que se ejecuten cada > >> digamos media hora o 1 hora, pero esto significaria tener que hacer a > >> mano > >> todos los "INSERT, UPDATE y DELETE" de cada una de las tablas con sus > >> respectivos campos, Ejemplo: > >> > >> -- Aqui van los DECLARE para cada campo > >> DECLARE ***Status char(1) -- <-- Ejemplo > >> DECLARE ***Campo1 int -- etc, etc. > >> > >> /* Agrega/Cambia/Borra registros en el servidor remoto segun el campo > >> Status > >> del servidor Local */ > >> DECLARE FLE_ABC CURSOR FOR SELECT [Campos] FROM [Tabla] WHERE > >> ISNULL(STATUS, > >> 'A') <> 'P' -- 'P' de Procesado > >> OPEN FLE_ABC > >> FETCH NEXT FROM FLE_ABC INTO [***Variables] > >> WHILE ******FETCH_STATUS = 0 > >> BEGIN > >> --SET XACT_ABORT ON > >> --BEGIN TRANSACTION ABC_Datos > >> IF (***Status = 'A') OR (***Status = 'B') OR (***Status = 'C') -- > >> 'A'=Alta, 'B'=Baja, 'C'=Cambio, solo los registros que no esten > >> procesados > >> (Status<>'P'). > >> BEGIN > >> IF (***Status = 'A') OR (***Status = 'C') > >> BEGIN > >> IF EXISTS(SELECT * FROM > >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] WHERE [Campo] = > >> [***Variable]) -- Si ya existe el registro en el servidor remoto, solo lo > >> actualiza > >> BEGIN > >> UPDATE > >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] > >> SET [Campo1]=[***Variable1], [Campo2]=[***Variable2] > >> WHERE [Campo] = [***Variable] -- Y asi con todos lo campos de la > >> tabla > >> END > >> ELSE -- Si no existe el registro en el > >> servidor remoto, lo agrega > >> BEGIN > >> INSERT INTO > >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] ([Campo1], [Campo2]) > >> VALUES([***Variable1], [***Variable2]) > >> END > >> END > >> ELSE > >> BEGIN > >> DELETE FROM > >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] > >> WHERE [Campo] = [***Variable] > >> END > >> END > >> --COMMIT TRANSACTION ABC_Datos > >> FETCH NEXT FROM FLE_ABC INTO [***Variables] > >> END > >> CLOSE FLE_ABC > >> DEALLOCATE FLE_ABC > >> > >> Despues de esto se ejecutaria otro procedimiento almacenado (u otro > >> proceso > >> dentro de este mismo SP) que ponga el campo Status = 'P', segun localize > >> o > >> no los registros en la > >> Db del servidor remoto. > >> > >> > >> Esto como dije significa que debo hacer algo asi, para cada tabla (son > >> como > >> 50), aparte de agregar un campo de status a cada tabla. > >> > >> No existe algo en Sql, para dar de alta/modificar el registro completo > >> sin > >> tener que entrar en detalle de especificar cada campo (como es el caso > >> del > >> insert, o update) ? > >> > >> Alguien tiene una idea sin tener que usar replicacion (ya que esa fue la > >> sugerencia que me hicieron[no usar replicacion]) ? > >> Si quieren mas informacion con gusto la proporciono. > >> Espero haber explicado bien la problematica. > >> > >> Cualquier idea es bienvenida. > >> > >> Gracias de antemano. > >> > >> Saludos. > >> > >> > >> > > > |
| |||
| Muchas Gracias otra vez por responder, les echare un vistazo. Saludos. "Juan Carlos Inestroza Lozano" <JuanCarlosInestrozaLozano***discussions.microsoft.c om> wrote in message news:620CA43D-9B36-49BF-A04D-BB257F46C5F2***microsoft.com... > Bueno aca te envio unas paginas para ver tema por tema: > > Implementacion de Replicacion: > http://www.monografias.com/trabajos1...on-datos.shtml > http://www.microsoft.com/spain/sql/2.../replicat.aspx > > En cuanto a DTS de SQL Server 2000 te envio estos links de nivel basico a > intermedio: > > http://www.manualespracticos.blogspot.com/ > http://support.microsoft.com/default.aspx/kb/242391/es > > Existe un libro que se llama SQL Server 2000 DTS step by step, o puedes > tomar un cursos certificado de SQL Server 2000 como el MOC 2092. > > Saludos Cordiales. > > > Juan Carlos Inestroza Lozano. > > > > > > > > > > "Alr'" wrote: > >> Muchas gracias por la respuesta. >> Tendras alguna pagina o sitio donde pueda ver algun ejemplo o simplemente >> me >> doy un clavado a los >> libros en linea de Sql 2000 ? >> >> Saludos. >> >> "Juan Carlos Inestroza Lozano" >> <JuanCarlosInestrozaLozano***discussions.microsoft.c om> wrote in message >> news:0289B3CF-BA7F-4993-8791-B39FEF06D59C***microsoft.com... >> > Hola >> > >> > Te recomendaria usar DTS y asi verifiques los medios de tranferencia de >> > estos servidores y uses SQL TASk para poder empotrar las clausulas que >> > no >> > permitan datos repetidas y mantegas la integridad de la BD, el >> > escenario >> > de >> > agentes de replicacion es el mas recomendado con el modelo publicados y >> > suscriptor!! >> > >> > >> > pero debes d etener uan buena arquitectura de comunicaciones!!! >> > >> > Saludos Cordiales. >> > >> > >> > Juan Carlos Inestroza Lozano. >> > >> > "Alr'" wrote: >> > >> >> Tengo dos servidores Dell (uno con Win2k Server, y otro con Win 2003 >> >> R2 >> >> server, ambos con sus service pack respectivo), los dos tienen >> >> instalado >> >> Sql2000 Standard Edition >> >> Service Pack 4, los dos servidores estan en diferentes cuidades, en >> >> uno >> >> de >> >> ellos se corre un sistema de pedidos. El caso es que me piden que la >> >> informacion de este servidor >> >> se pase al de la otra cuidad (Win 2003 R2 server, donde se encuentra >> >> la >> >> administracion), ya que quieren ver los datos lo mas en linea que se >> >> pueda, >> >> sin embargo me comentan >> >> tambien que han tenido no muy buenas experiencias con el replicador de >> >> Sql, >> >> por lo que me pidieron que usara otra cosa (aparte que nunca he >> >> implementado >> >> un replicador), he >> >> pensado en servidores vinculados (ya que en la cuidad donde llegaran >> >> los >> >> datos, existe algo que hace las veces de una ip publica), de forma que >> >> si >> >> tengo coneccion de un lado >> >> hacia el otro (pero no hacia ambos lados). >> >> Mi pregunta es, hay alguna forma de implementar esta situacion de >> >> forma >> >> mas >> >> o menos simple ? >> >> Ya que lo que se me ocurre son procedimientos almacenados que hagan >> >> las >> >> veces de triggers (es decir que estos SP pasen los datos de un >> >> servidor >> >> al >> >> otro), y que se ejecuten cada >> >> digamos media hora o 1 hora, pero esto significaria tener que hacer a >> >> mano >> >> todos los "INSERT, UPDATE y DELETE" de cada una de las tablas con sus >> >> respectivos campos, Ejemplo: >> >> >> >> -- Aqui van los DECLARE para cada campo >> >> DECLARE ***Status char(1) -- <-- Ejemplo >> >> DECLARE ***Campo1 int -- etc, etc. >> >> >> >> /* Agrega/Cambia/Borra registros en el servidor remoto segun el campo >> >> Status >> >> del servidor Local */ >> >> DECLARE FLE_ABC CURSOR FOR SELECT [Campos] FROM [Tabla] WHERE >> >> ISNULL(STATUS, >> >> 'A') <> 'P' -- 'P' de Procesado >> >> OPEN FLE_ABC >> >> FETCH NEXT FROM FLE_ABC INTO [***Variables] >> >> WHILE ******FETCH_STATUS = 0 >> >> BEGIN >> >> --SET XACT_ABORT ON >> >> --BEGIN TRANSACTION ABC_Datos >> >> IF (***Status = 'A') OR (***Status = 'B') OR (***Status = 'C') -- >> >> 'A'=Alta, 'B'=Baja, 'C'=Cambio, solo los registros que no esten >> >> procesados >> >> (Status<>'P'). >> >> BEGIN >> >> IF (***Status = 'A') OR (***Status = 'C') >> >> BEGIN >> >> IF EXISTS(SELECT * FROM >> >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] WHERE [Campo] = >> >> [***Variable]) -- Si ya existe el registro en el servidor remoto, solo >> >> lo >> >> actualiza >> >> BEGIN >> >> UPDATE >> >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] >> >> SET [Campo1]=[***Variable1], >> >> [Campo2]=[***Variable2] >> >> WHERE [Campo] = [***Variable] -- Y asi con todos lo campos de la >> >> tabla >> >> END >> >> ELSE -- Si no existe el registro en el >> >> servidor remoto, lo agrega >> >> BEGIN >> >> INSERT INTO >> >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] ([Campo1], [Campo2]) >> >> VALUES([***Variable1], [***Variable2]) >> >> END >> >> END >> >> ELSE >> >> BEGIN >> >> DELETE FROM >> >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] >> >> WHERE [Campo] = [***Variable] >> >> END >> >> END >> >> --COMMIT TRANSACTION ABC_Datos >> >> FETCH NEXT FROM FLE_ABC INTO [***Variables] >> >> END >> >> CLOSE FLE_ABC >> >> DEALLOCATE FLE_ABC >> >> >> >> Despues de esto se ejecutaria otro procedimiento almacenado (u otro >> >> proceso >> >> dentro de este mismo SP) que ponga el campo Status = 'P', segun >> >> localize >> >> o >> >> no los registros en la >> >> Db del servidor remoto. >> >> >> >> >> >> Esto como dije significa que debo hacer algo asi, para cada tabla (son >> >> como >> >> 50), aparte de agregar un campo de status a cada tabla. >> >> >> >> No existe algo en Sql, para dar de alta/modificar el registro completo >> >> sin >> >> tener que entrar en detalle de especificar cada campo (como es el caso >> >> del >> >> insert, o update) ? >> >> >> >> Alguien tiene una idea sin tener que usar replicacion (ya que esa fue >> >> la >> >> sugerencia que me hicieron[no usar replicacion]) ? >> >> Si quieren mas informacion con gusto la proporciono. >> >> Espero haber explicado bien la problematica. >> >> >> >> Cualquier idea es bienvenida. >> >> >> >> Gracias de antemano. >> >> >> >> Saludos. >> >> >> >> >> >> >> >> >> |
| |||
| De nada estamos a la orden Solo recuerda mas investigar sobre desarollo step by step de DTS en sql server 2000 o de SSIS para sql 2005. Saludos. Juan Carlos Inestroza Lozano "Alr'" wrote: > Muchas Gracias otra vez por responder, les echare un vistazo. > > Saludos. > > > "Juan Carlos Inestroza Lozano" > <JuanCarlosInestrozaLozano***discussions.microsoft.c om> wrote in message > news:620CA43D-9B36-49BF-A04D-BB257F46C5F2***microsoft.com... > > Bueno aca te envio unas paginas para ver tema por tema: > > > > Implementacion de Replicacion: > > http://www.monografias.com/trabajos1...on-datos.shtml > > http://www.microsoft.com/spain/sql/2.../replicat.aspx > > > > En cuanto a DTS de SQL Server 2000 te envio estos links de nivel basico a > > intermedio: > > > > http://www.manualespracticos.blogspot.com/ > > http://support.microsoft.com/default.aspx/kb/242391/es > > > > Existe un libro que se llama SQL Server 2000 DTS step by step, o puedes > > tomar un cursos certificado de SQL Server 2000 como el MOC 2092. > > > > Saludos Cordiales. > > > > > > Juan Carlos Inestroza Lozano. > > > > > > > > > > > > > > > > > > > > "Alr'" wrote: > > > >> Muchas gracias por la respuesta. > >> Tendras alguna pagina o sitio donde pueda ver algun ejemplo o simplemente > >> me > >> doy un clavado a los > >> libros en linea de Sql 2000 ? > >> > >> Saludos. > >> > >> "Juan Carlos Inestroza Lozano" > >> <JuanCarlosInestrozaLozano***discussions.microsoft.c om> wrote in message > >> news:0289B3CF-BA7F-4993-8791-B39FEF06D59C***microsoft.com... > >> > Hola > >> > > >> > Te recomendaria usar DTS y asi verifiques los medios de tranferencia de > >> > estos servidores y uses SQL TASk para poder empotrar las clausulas que > >> > no > >> > permitan datos repetidas y mantegas la integridad de la BD, el > >> > escenario > >> > de > >> > agentes de replicacion es el mas recomendado con el modelo publicados y > >> > suscriptor!! > >> > > >> > > >> > pero debes d etener uan buena arquitectura de comunicaciones!!! > >> > > >> > Saludos Cordiales. > >> > > >> > > >> > Juan Carlos Inestroza Lozano. > >> > > >> > "Alr'" wrote: > >> > > >> >> Tengo dos servidores Dell (uno con Win2k Server, y otro con Win 2003 > >> >> R2 > >> >> server, ambos con sus service pack respectivo), los dos tienen > >> >> instalado > >> >> Sql2000 Standard Edition > >> >> Service Pack 4, los dos servidores estan en diferentes cuidades, en > >> >> uno > >> >> de > >> >> ellos se corre un sistema de pedidos. El caso es que me piden que la > >> >> informacion de este servidor > >> >> se pase al de la otra cuidad (Win 2003 R2 server, donde se encuentra > >> >> la > >> >> administracion), ya que quieren ver los datos lo mas en linea que se > >> >> pueda, > >> >> sin embargo me comentan > >> >> tambien que han tenido no muy buenas experiencias con el replicador de > >> >> Sql, > >> >> por lo que me pidieron que usara otra cosa (aparte que nunca he > >> >> implementado > >> >> un replicador), he > >> >> pensado en servidores vinculados (ya que en la cuidad donde llegaran > >> >> los > >> >> datos, existe algo que hace las veces de una ip publica), de forma que > >> >> si > >> >> tengo coneccion de un lado > >> >> hacia el otro (pero no hacia ambos lados). > >> >> Mi pregunta es, hay alguna forma de implementar esta situacion de > >> >> forma > >> >> mas > >> >> o menos simple ? > >> >> Ya que lo que se me ocurre son procedimientos almacenados que hagan > >> >> las > >> >> veces de triggers (es decir que estos SP pasen los datos de un > >> >> servidor > >> >> al > >> >> otro), y que se ejecuten cada > >> >> digamos media hora o 1 hora, pero esto significaria tener que hacer a > >> >> mano > >> >> todos los "INSERT, UPDATE y DELETE" de cada una de las tablas con sus > >> >> respectivos campos, Ejemplo: > >> >> > >> >> -- Aqui van los DECLARE para cada campo > >> >> DECLARE ***Status char(1) -- <-- Ejemplo > >> >> DECLARE ***Campo1 int -- etc, etc. > >> >> > >> >> /* Agrega/Cambia/Borra registros en el servidor remoto segun el campo > >> >> Status > >> >> del servidor Local */ > >> >> DECLARE FLE_ABC CURSOR FOR SELECT [Campos] FROM [Tabla] WHERE > >> >> ISNULL(STATUS, > >> >> 'A') <> 'P' -- 'P' de Procesado > >> >> OPEN FLE_ABC > >> >> FETCH NEXT FROM FLE_ABC INTO [***Variables] > >> >> WHILE ******FETCH_STATUS = 0 > >> >> BEGIN > >> >> --SET XACT_ABORT ON > >> >> --BEGIN TRANSACTION ABC_Datos > >> >> IF (***Status = 'A') OR (***Status = 'B') OR (***Status = 'C') -- > >> >> 'A'=Alta, 'B'=Baja, 'C'=Cambio, solo los registros que no esten > >> >> procesados > >> >> (Status<>'P'). > >> >> BEGIN > >> >> IF (***Status = 'A') OR (***Status = 'C') > >> >> BEGIN > >> >> IF EXISTS(SELECT * FROM > >> >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] WHERE [Campo] = > >> >> [***Variable]) -- Si ya existe el registro en el servidor remoto, solo > >> >> lo > >> >> actualiza > >> >> BEGIN > >> >> UPDATE > >> >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] > >> >> SET [Campo1]=[***Variable1], > >> >> [Campo2]=[***Variable2] > >> >> WHERE [Campo] = [***Variable] -- Y asi con todos lo campos de la > >> >> tabla > >> >> END > >> >> ELSE -- Si no existe el registro en el > >> >> servidor remoto, lo agrega > >> >> BEGIN > >> >> INSERT INTO > >> >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] ([Campo1], [Campo2]) > >> >> VALUES([***Variable1], [***Variable2]) > >> >> END > >> >> END > >> >> ELSE > >> >> BEGIN > >> >> DELETE FROM > >> >> [ServidorRemoto].[DbRemota].dbo.[TablaRemota] > >> >> WHERE [Campo] = [***Variable] > >> >> END > >> >> END > >> >> --COMMIT TRANSACTION ABC_Datos > >> >> FETCH NEXT FROM FLE_ABC INTO [***Variables] > >> >> END > >> >> CLOSE FLE_ABC > >> >> DEALLOCATE FLE_ABC > >> >> > >> >> Despues de esto se ejecutaria otro procedimiento almacenado (u otro > >> >> proceso > >> >> dentro de este mismo SP) que ponga el campo Status = 'P', segun > >> >> localize > >> >> o > >> >> no los registros en la > >> >> Db del servidor remoto. > >> >> > >> >> > >> >> Esto como dije significa que debo hacer algo asi, para cada tabla (son > >> >> como > >> >> 50), aparte de agregar un campo de status a cada tabla. > >> >> > >> >> No existe algo en Sql, para dar de alta/modificar el registro completo > >> >> sin > >> >> tener que entrar en detalle de especificar cada campo (como es el caso > >> >> del > >> >> insert, o update) ? > >> >> > >> >> Alguien tiene una idea sin tener que usar replicacion (ya que esa fue > >> >> la > >> >> sugerencia que me hicieron[no usar replicacion]) ? > >> >> Si quieren mas informacion con gusto la proporciono. > >> >> Espero haber explicado bien la problematica. > >> >> > >> >> Cualquier idea es bienvenida. > >> >> > >> >> Gracias de antemano. > >> >> > >> >> Saludos. > >> >> > >> >> > >> >> > >> > >> > >> > > > |
| |
| |
![]() |
| Herramientas | |
| Desplegado | |
| |
Temas Similares | ||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Cómo llenar una tabla con datos de otra BDD en otro servidor? | Don Juan | Newsgroup microsoft.public.es.sqlserver | 1 | 02-06-2008 12:15:01 |
| Pasar toda la configuración de un servidor a otro servidor | Ruben Gomez | Newsgroup microsoft.public.es.exchange | 4 | 27-12-2007 08:16:00 |
| Pasar un servidor con Sharepoint de un dominio a otro. | Salvador Ramos | Newsgroup microsoft.public.es.sharepoint | 4 | 26-08-2007 10:58:46 |
| pasar datos de un form a otro | Randall Garita | Newsgroup microsoft.public.es.vfoxpro.formularios | 6 | 09-06-2006 16:01:06 |
| Parar servicios en Remoto de un servidor a otro como ????????? | Pedro Juan | Newsgroup microsoft.public.es.backoffice | 24 | 05-04-2006 16:11:03 |