![]() |
SQL Server 2005 Express y las transacciones anidadas
Hola a todos en el foro.
Si no es la primera vez que escribo, probablemente sea la segunda y es para pediros ayuda... Tengo dos bases de datos creadas dentro de un servidor MS SQL server 2005 Express. Tanto en la base de datos A como en la B existen las mismas tablas. La base de datos A es para los "dato de trabajo" y la base de datos B es para hacer las labores de "Histórico". Lo que quiero implementar es el traspaso de información de la base de datos A a la base de datos B. Más específicamente, mover un registro de la base de datos A a la B. Esto lo llevaría a cabo copiando el contenido de un registro de la tabla T1 de la base de datos A a la tabla T1 de la base de datos B y a continuación eliminando dicho registro de la tabla T1 de la base de datos A. Además, para mí es muy importante hacerlo dentro de transacciones para asegurarme que si falla el copiado no ejecute el borrado, o que si falla el borrado que deshaga el copiado. dbHistorico y dbDatos son dos TADOConnection El trozo de código es el siguiente... Código:
cSentenciaHistorico := 'INSERT INTO T1 (campo) values ('valor'); No soy capaz de hayar una solución.:confused: ¿Vosotros veis si me estoy equivocando en algo? ¿Se os ocurre alguna otra forma de mover los registros de una db a otra de forma segura? Perdonad por el tocho, pero es que no me sé explicar mejor.:o Muchas gracias por adelantado. :) |
Hola
Sugerencia, ... si lo trabajas en un procedimiento almacenado??? (como un todo, ... debo suponer que todo esta en un mismo server)
Your friend StartKill Lima-Peru |
Hola StartKill, gracias por tu respuesta.
Efectivamente tal y como supones, las dos bases de datos están en el mismo server. Realizar toda la operación con un procedimiento almacenado es una opción que he barajado, pero debido a que aún ando un poco verde con SQL, no sé como referenciar la tabla de una y otra base de datos. Siendo más específico, entre el begin try y el commit transaction, tendré que meter una sentencia INSERT que diga que el insert lo voy a hacer en la base de datos B y un delete que diga que lo voy a hacer en la tabla1 de la base de datos A, pero no conozco la sintaxis, un ejemplo sería de gran ayuda (mientras yo voy repasando documentación). |
Hay una utilidad de MS que te muestra toda las sentencias de SQL SERVER 2005 y te la puedes descargar Libro en pantalla de SQL Server es la que yo uso cuando tengo alguna duda.
Un saludo. |
...descargando...
|
Cita:
Algo por este estilo es como deberías usar, espero te sirva. Saludos. |
Muchas gracias compañeros, sin vuestra ayuda me hubiese quedado atascado demasiado tiempo intentando resolver este tema.
Bueno, pues finalmente me he decidido por el siguiente grupo de instrucciones. Espero que no parezca muy chapucero, pero después de algunas pruebas, esto me encaja para lo que quiero llevar a cabo, es decir, funciona, no sé si será la mejor opción, pero al menos me funciona. Finalmente no he recurrido ni a un procedimiento almacenado ni a transacciones anidadas pero encajará (creo :cool:). Tomando el ejemplo de mightydragonlor, he visto la sintaxis para referenciar tablas de distintas bases de datos, es decir [base de datos 1].dbo.tabla1 Con ese dato lo que voy a hacer es componer una transacción que implique cambios en las dos bases de datos y... o todo va bien, o no se hace nada. Nota: cSentencia es una variable de tipo WideString, dbDatos es un TADOConnection y zComillaSimple es una función que agrega una comilla simple ' al principio y al final de la cadena de caracteres que se le pasa como parámetro. Código:
... Vuelvo a insistir en agradecer vuestra ayuda, sois fabulosos. |
La franja horaria es GMT +2. Ahora son las 11:54:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi