Pregunta

Tengo table a y table b. (SQL Server 2008)

Las dos tablas tienen exactamente el mismo esquema.

A los efectos de esta pregunta, considere table a = mi mesa dev locales, table b = la mesa en vivo.

Es necesario crear una secuencia de comandos SQL (que contiene declaraciones UPDATE/DELETE/INSERT) que actualizará la tabla b a ser la misma que la tabla a. Este script luego se desplegará en la base de datos activa.

Cualquier herramientas gratuitas por ahí que puede hacer esto, o mejor aún, de manera que pueda hacer yo mismo?

Estoy pensando que probablemente tenga que hacer algún tipo de una unión en todos los campos de las tablas, a continuación, generar el SQL dinámico basado en eso.

Alguien tiene alguna idea?

Editar

Bueno, pensé que aclarar esta cuestión un poco.

En la tabla I necesidad de sincronizar es una sencilla tabla de consulta. El dato es muy simple y directo.

He aquí una idea de lo que podría parecer TABLE A:

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           0

He aquí una idea de lo que podría parecer TABLE B:

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           1

Básicamente, todo lo que quiero hacer es actualizar esa columna BIT (IsFoo) en TABLE B para que coincida con el valor correspondiente en TABLE A para el mismo IdFoo.

Tenga en cuenta:

  • TABLE A es en mi máquina local
  • TABLE B está en el servidor vivo

Obviamente tengo una copia de seguridad (fiable) de TABLE B en mi máquina local que necesito secuencia de comandos, a continuación, ejecute la secuencia de comandos en el servidor en vivo.

La tabla también tiene la integridad referencial (otras columnas no me haya mostrado). Lo que significa que no puedo acaba de borrar todo en TABLE B y hacer una inserción de TABLE A.

Este script será una vez fuera. Por lo tanto no hay necesidad de hacer cosas como servidor vinculado, replicación, etc. Apreciar las respuestas aunque los chicos. =)

EDIT:

Ok - así que he ido con la respuesta de Oleg (VS2010 Comparación de datos). Rápida, fácil, y funciona a las mil maravillas.

No quiere decir las otras respuestas son incorrectas. Agradezco todas las respuestas!

¿Fue útil?

Solución

En casos muy simples que usted será capaz de definir en su local de SQL Server un nuevo servidor vinculado (véase en Microsoft SQL Server Management Studio en "objetos de servidor" / "el servidor vinculado") las diferencias y el uso INNER JOIN y OUTER JOIN para averiguar entre A y B tablas.

En una situación real y más complejo que debe tomar en consideración la integridad referencial, diferentes claves externas, e Identidad (incremento automático) campos existentes en la base de datos de destino, por lo que el script de actualización será más complejo. Así que voy a recomiendo que no pasa su tiempo en la creación de la sincronización de su desarrollador y la producción de base de datos y el uso de una herramienta estándar en su lugar. Yo uso, por ejemplo, las características de Team Edition 2008 (o edición de base de datos) de Visual Studio o Visual Studio 2010 Ultimate edition para comparar los datos de dos bases de datos. Funciona muy bien.

Otros consejos

respuesta tardía pero puede ser útil a los visitantes de rosca

Además de otras soluciones mencionadas, puedo sugerir tratando ApexSQL Dif datos. Puede cotejar los datos de bases de datos de sincronización de SQL Server (en bases de datos en vivo, así como copias de seguridad), y las migraciones de datos automatizar y programar. Se trabaja con bases de datos enormes también, y es capaz de realizar comparaciones directamente de SSMS.

Se puede descargar esta herramienta de forma gratuita y jugar con él. Cuenta con una versión de prueba totalmente funcional, y ofrece una edición de la comunidad (después del período de prueba ha terminado) que funciona en SQL Express y SQL Azure base de datos.

Para obtener más información sobre la herramienta, puede visitar http://www.apexsql.com/sql_tools_datadiff. aspx

Si lo que desea sincronizar las tablas y no se preocupan por la revisión de los cambios de antemano el comando MERGE puede hacer esto.

MSDN - MERGE (Transact-SQL)

El (gratis) Microsoft SSDT también tiene datos de comparación y sincronización construidos en aunque es más limitada que herramientas de pago, tales como datos de Redgate comparar.

Hay de datos SQL Comparar de Redgate (aunque no libres ) y también hay SMO y la construida en funcionabilidad .

Wikipedia tiene una lista bastante completa de software.

Ya que es uno fuera, puede utilizar esta consulta para buscar filas que son diferentes en estas dos tablas:

(SELECT * FROM TABLE_A
 MINUS
 SELECT * FROM TABLE_B)

 UNION ALL

(SELECT * FROM TABLE_B
 MINUS
 SELECT * FROM TABLE_A)

MINUS comparará campo de registros por el campo, entonces se descartará los registros de la primera tabla para los que hay registro idéntico en el segundo cuadro. Esto funciona como esto:

  • En primer lugar MINUS obtiene todos los registros de TABLE_A que no están en TABLE_B
  • Segundo MINUS obtiene todos los registros de TABLE_B que no están en TABLE_A
  • Unión recibe todos los registros de ambas tablas para las que no hay registro coincidente en la otra tabla.

Ahora usted puede insertar los registros en alguna tabla temporal y luego hacer inserciones / actualizaciones.

En función de sus necesidades, puede restringir la lista de campos para la comparación.

Tenga en cuenta que lo que necesita la clave principal para que esto funcione.

Editar
Lamentablemente. SQL Server no admite el operador MINUS. Estoy trabajando con Oracle último año y medio, por lo que este fue automática.

Puede utilizar el operador EXCEPT lugar. Ver este artículo: excepto y INTERSECT ( Transact-SQL)

Editar 2:

de scherand comentario :
Si realmente no se puede conectar a la máquina local al servidor en vivo, de lo que simplemente puede volcar TABLE_A y cargarlo en el servidor. De un modo u otro, objetivo es el cambio en la tabla de datos del servidor en vivo.

Me corrió en el mismo problema que tú - buscó una herramienta gratuita que compara los datos de dos tablas de MS SQL - y no encontró nada. Entonces creé una sencilla utilidad de línea de comandos freeware. Se comparan los datos de dos tablas, y crea statemenets INSERT/DELETE/UPDATE para que los datos de la tabla de destino del mismo como fuente. Ahora lo estoy usando para la comparación de datos, y ya que es completamente libre, puedo recomendar para comprobar hacia fuera en: Sourceforge. net - UltraDBC

Se puede usar un generador de secuencia de comandos de datos que crea secuencias de comandos para las inserciones, y luego usar una herramienta de comparación de archivos tales como WinMerge para comparar los archivos para encontrar las diferencias. Hay un artículo en la generación de las secuencias de comandos de datos en el proyecto de código: http: //www.codeproject. com / KB / base de datos / sqlinsertupdategenerator.aspx

tablediff funcionaría - es gratis y viene con SQL Server http://msdn.microsoft.com/en-us/library/ms162843.aspx

También puede intentar usar la import and export data proporcionado por SQL Server 2008. Su es bastante recta manera de copiar todos los datos desde cualquier lugar del mundo. Hago lo mismo y funciona perfectamente.

Se podría tratar nuestra comparación de esquemas para SQL Server

Esta herramienta no está libre (que es una version de prueba), pero se puede utilizar 30 días de prueba gratis, y también, usted tiene la oportunidad de obtener una licencia libre para este producto - por favor refiérase a nuestra libre de la página condiciones de la licencia .

¿Qué pasa si usted:

  1. copiar devTableA en prod,
  2. suspender las dependencias de prodTableB
  3. cambiar el nombre de prodTable B a prodTableB1,
  4. Cambiar nombre devTableA a prodTableB
  5. dependencias reimplementar en nueva prodTableB
  6. Prueba de nuevo prodTableB y elimine fuera nombrado prodTableB de edad

o si tiene que ser más respetuosos con el sus valores de columna de identidad en tanto dev y prod partido (incluso si los valores no son continuas) prodTableB existente y ...

declare @iLast int, @x int, @y int
select @iLast = (select MAX(id) from prodTableB)
set @x = 1
while @x <= @iLast
begin
  select @y = (select COUNT(*) from prodTableB where id = @x)
  if @y = 1
    begin
      update prodTableB set isFoo = (select isFoo from devTableA where id=@x
    end
  @x=@x+1
end

También puede echar un vistazo a xSQL datos de comparación . La versión de SQL Express es gratuito y también hay una versión Lite que va a hacer el truco para pequeñas bases de datos.

Una buena herramienta libre es también comparan los datos de SSDT .

exención de responsabilidad:. Yo estoy afiliado a xSQL

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top