A veces, los mejores datos son los que usted tiene en su base de datos SQL Server de producción. Ya que usar datos de producción no es muy a menudo una opción aceptable, esto requiere recuperar los datos desde una tabla de una base de datos en vivo e insertarlos en una nueva tabla. El desafío emerge si usted no desea insertar todos los registros de la tabla original, sino que sólo los registros que cumplen con ciertas condiciones.
Cómo crear un script INSERT INTO que mueve sólo datos específicos desde una tabla a otra.
Use una tabla adicional
Esta solución usa una tabla de base de datos adicional donde todos los registros que cumplen con el criterio son movidos primero, y luego la tabla es codificada.
- Cree una nueva tabla donde los registros filtrados serán grabados. El esquema de la tabla tiene que ser exactamente el mismo de la tabla original, donde los registros son grabados:
-
Ejecute un comando INSERTN INTO que use SELECT, para copiar datos desde la tabla original a la nueva.
En este ejemplo, la tabla Person.PersonPhone tiene casi 20000 registros. El objetivo es codificar sólo los registros para teléfonos de trabajo, por ejemplo, donde PhoneNumberTypeID = 3. Ejecute el siguiente SQL para insertar estos registros en la tabla PersonPhoneTemp:
INSERT INTO Person.PersonPhoneTemp SELECT BusinessEntityID , PhoneNumber , PhoneNumberTypeID , ModifiedDate FROM AdventureWorks2012.Person.PersonPhone WHERE PhoneNumberTypeID = 3;
Todos los 736 registros son insertados en la tabla Person.PersonPhoneTemp.
- Para crear un script DML para la tabla Person.PersonPhoneTemp, inicie SQL Server Management Studio
- Haga clic derecho en la base de datos enObject Explorer, seleccione Tasks y luego Generate Scripts
- En la pestaña Choose Objects seleccione la opción Select specific database objects y seleccione sólo la tabla donde los registros específicos fueron insertados
- En la pestaña Set Scripting Options seleccione la opción para grabar el script a un archivo
- En el diálogo Advanced Scripting Options, haga la configuración para codificar sólo datos
CREATE TABLE Person.PersonPhoneTemp( BusinessEntityID int NOT NULL PRIMARY KEY, PhoneNumber dbo.Phone NOT NULL, PhoneNumberTypeID int NOT NULL, ModifiedDate datetime NOT NULL)
El script generado contiene las sentencias INSERT INTO para todos los 736 registros donde PhoneNumberTypeID = 3.
INSERT INTO Person.PersonPhoneTemp ( BusinessEntityID, PhoneNumber, PhoneNumberTypeID, ModifiedDate) VALUES (2, N'819-555-0175', 3, CAST(0x000091BD00000000 AS datetime));
Para usar este script para insertar registros a una tabla específica con un nombre diferente, usted tiene que cambiar manualmente el nombre de la tabla en el script.
Si usted tiene tiempo y está implementando esto sólo para muchas tablas de bases de datos, esta es una solución bonita. De todas maneras, si usted está en un ambiente ocupado y no tiene tiempo para mover datos desde una tabla a otra, codificar e insertar, usted necesitará una mejor solución. Otra desventaja de esta solución es que no puede ser automatizada y programada.
ApexSQL Script es una herramienta de migración de bases de datos de SQL Server que codifica objetos de la base de datos y datos en uno o múltiples scripts SQL, soluciones .NET, o instaladores ejecutables. Puede automatizar y programar el proceso de migración para ejecutarse de forma desatendida.
- Inicie ApexSQL Script
-
Seleccione un servidor y haga clic en el botón Connect
-
Seleccione una base de datos en la lista y haga clic en el botónOpen
- En la cuadrícula principal, seleccione la pestaña Data
-
Seleccione la tabla donde los registros que desea codificar están almacenados.
- Para especificar el criterio para los registros, haga clic en el campoWhere
-
Ingrese la condición Where. Note que el Conteo de Filas es 19972
-
Haga clic en el botón Refresh. El Conteo de Filas cambia a 736
-
Para evitar una actualización manual del nombre de la tabla, en el script DML generado, especifique el Alias
- 1Si usted desea limitar el número de registros que cumplen con el criterio especificado que serán codificadas, ingrese el número de registros que desea codificar en el campo Max. Para codificar todos los registros, deje este campo vacío.
-
En la pestaña Home, haga clic en el botón Script
-
En el primer paso del asistente para Script, seleccione Data como modo de codificación, y T-SQL como tipo de salida.
- Haga clic en el botón Next
-
En la pestaña Output file options, seleccione la opción Create and write to file como el tipo de salida y la ruta del archivo.
El archivo SQL creado contiene sentencias INSERT INTO para 700 registros de teléfono de trabajo, ya que el valor máximo fue establecido en 700:
INSERT INTO Person.WorkPhone ( BusinessEntityID, PhoneNumber, PhoneNumberTypeID, ModifiedDate) VALUES (2, N'819-555-0175', 3, '20020224 00:00:00.000');
Codificar datos específicos y moverlos de una tabla a otra puede ser fácil y automatizado. En lugar de estar con prisas con tablas adicionales donde un subconjunto de registros es movido para ser codificado, use ApexSQL Script para crear un script DML directamente desde la tabla original que contiene todos los datos, incluso los registros que no desea codificar.
noviembre 23, 2017