es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Archivo de exportación incremental de SQL Server BCP.

Estoy intentando utilizar BCP para exportar mis datos a un archivo .TXT, pero necesito realizar una exportación incremental en el mismo archivo, ya que necesitaré exportar datos de dos vistas.

Ejemplo:

SET @cmd = '"SELECT * FROM Site"'

SELECT @sql = 'bcp '+@cmd+' queryout D:\mytest.txt -c -t; -T -S SERVER-PC\SQLEXPRESS';

EXEC xp_cmdshell @sql;

SET @cmd = '"SELECT * FROM Customers"'

SELECT @sql = 'bcp '+@cmd+' queryout D:\mytest.txt -c -t; -T -S SERVER-PC\SQLEXPRESS';

EXEC xp_cmdshell @sql;

Salida de datos:

H;04399024100427;20160620
V;04399024100427;CLIENTE I;ESTADO;CIUDAD;NOMBRE;75123390;A

Pensé en utilizar UNION ALL, pero la estructura de las tablas es diferente y tengo casos en los que necesitaré exportar datos de hasta 5 tablas.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para realizar una exportación incremental de datos desde múltiples vistas en el mismo archivo utilizando BCP, puedes modificar el comando para utilizar la opción -a, la cual agrega datos al archivo existente en lugar de sobrescribirlo. Aquí tienes un ejemplo:

    SET @cmd = '"SELECT * FROM Site"'
    SELECT @sql = 'bcp '+@cmd+' queryout D:\mytest.txt -c -t; -T -S SERVER-PC\SQLEXPRESS -a'
    
    EXEC xp_cmdshell @sql;
    
    SET @cmd = '"SELECT * FROM Customers"'
    SELECT @sql = 'bcp '+@cmd+' queryout D:\mytest.txt -c -t; -T -S SERVER-PC\SQLEXPRESS -a'
    
    EXEC xp_cmdshell @sql;
    

    Nota la adición de la opción -a, la cual indica a BCP que añada al archivo existente en lugar de crear uno nuevo. De esta manera, los datos de cada vista serán agregados al mismo archivo.

    En cuanto a la exportación de datos desde tablas con estructuras diferentes, puedes utilizar la declaración SELECT para hacer coincidir los nombres y el orden de las columnas entre las tablas. Por ejemplo:

    SET @cmd = '"SELECT ID, Name, Address FROM Table1"'
    SELECT @sql = 'bcp '+@cmd+' queryout D:\mytest.txt -c -t; -T -S SERVER-PC\SQLEXPRESS -a'
    EXEC xp_cmdshell @sql;
    
    SET @cmd = '"SELECT CustomerID AS ID, CustomerName AS Name, AddressLine1 AS Address FROM Table2"'
    SELECT @sql = 'bcp '+@cmd+' queryout D:\mytest.txt -c -t; -T -S SERVER-PC\SQLEXPRESS -a'
    EXEC xp_cmdshell @sql;
    

    En este ejemplo, la primera declaración SELECT exporta datos desde una tabla con las columnas ID, Name y Address. La segunda declaración SELECT exporta datos desde una tabla con las columnas CustomerID, CustomerName y AddressLine1, pero utiliza alias para asegurar que los nombres y el orden de las columnas coincidan con la primera tabla. Puedes repetir este proceso para un máximo de 5 tablas según sea necesario.

Comments are closed.