Nuestros usuarios desean actualizar una base de datos de control de calidad de producción pero quieren dos tablas (llamémoslas T1 y T2) para retener los datos de control de calidad originales. Así que copié dos tablas de QA (DB1) a una base de datos temporal de QA (DB2). Luego refrescó DB1 de producción. Después de la actualización, quiero sobrescribir los datos T1 y T2 de DB2 a DB1 para que puedan contener valores de QA previos a la actualización.
He hecho lo siguiente:
Utilizar
select * INTO D1.dbo.T1 FROM D2.dbo.T1
Luego actualizado D1 de prod
Luego trunca T1 con el siguiente paso:
SELECT COUNT(*) AS BeforeTruncateCount FROM T1; GO TRUNCATE TABLE T1; GO SELECT COUNT(*) AS AfterTruncateCount FROM T1; GO
Ahora, cuando vuelvo a copiar datos de D2.T1 a D1.T1, aparece el error de que ya hay un objeto llamado T1 en la base de datos.
¿Debo dejar caer la mesa y copiar?
¿O hay algún método mejor para todo el procedimiento?
fuente
*
) si hay un campo de identidad en la tabla; esos valores no pueden simplemente "copiarse".IIRC con la
SELECT <stuff> INTO <target> FROM ...
sintaxis SQL Server siempre asume que desea crear la tabla de destino desde cero. Cuando la tabla ya existe, intente en suINSERT <target> SELECT <stuff> FROM ...
lugar.fuente
db_datareader
), si abandona la tabla, pierde esos permisos.Lo mejor es usar SSIS (importación / exportación de datos) para hacer esto. Tiene la funcionalidad de simplemente transferir tablas seleccionadas de origen a destino. Opcionalmente, incluso puede guardar el paquete para que pueda reutilizarse para transferencias futuras / repetidas.
EDITAR: Agregar más capturas de pantalla para mayor claridad.
fuente