Exportar resultado de una query a un archivo en Sql Server 2008 R2 (BCP Utility)
A continuación les presentamos un procedimiento almacenado que hemos creado para que puedan exportar sus consultas tsql rápidamente a un archivo plano.
GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo][qualityInfoSolutions] @Archivo varchar(255), @Query varchar(1000) AS BEGIN TRY declare @Sql nvarchar(1000); declare @Resultado nvarchar(50); set @Sql = 'exec master..xp_cmdshell ' + char(39) + 'bcp "'+ @Query + '" queryout "' + @Archivo + '" -c -t -T ' + char(39) PRINT @Sql; EXECUTE sp_executesql @Sql; SET @Resultado = 'Exito' select @Resultado as Resultado; END TRY BEGIN CATCH SET @Resultado = 'Error' select @Resultado as Resultado; END CATCH
A continuación un ejemplo de como probarlo:
DECLARE @return_value int EXEC @return_value = [dbo].[Sp805ExportBDToFile] @Archivo 'C:\cliente.txt', @Query = 'SELECT * FROM TUDATABASE.DBO.Cliente' SELECT 'Return Value' = @return_value
*Este procedimiento realiza la exportación por lotes de 1000 registros.
*Es importante enviar la ruta completa de la tabla
*Deben tener habilitada la opción XPCmdShellEnable (Pueden encontrarla presionando clic derecho sobre el servidor-> Facets -> Server Configuration -> XPCmdShellEnable –Dejar en True)
Esperamos sea de su utilidad.
Hola, estoy tratando de usar algo parecido, pero me manda el error:
output
Unable to load BCP resource DLL. BCP cannot continue.
Ya active el XPCmdShellEnable.. 🙁
En que parte se adiciona el store procedure en la BD Master?
Debes utilizar un programa por ejemplo sql management studio y ejecutar el código mediante una consulta sql.
Si utilizas este programa veras que esta ordenado todo por carpetas y podrás encontrar una que dice Store Procedure o Procedimientos Almacenados dependiendo del idioma de instalación.
Saludos
Gracias por tu pronta respuesta. Mi pregunta va mas a si debe ir en los procedimientos almacenados de mi base de datos o debe ir en los procedimientos almacenados de la base de datos master.
Se debe dejar en tu base de datos y recordar que las rutas deben ser visibles por tu servidor.
Saludos
Es posible sacar un lote mas grande?
Si, pero te recomiendo no abusar del tamaño de los lotes
Eso solo es posible si tu equipo es el que tiene instalado sql server y funciona como servidor. El problema es que si utilizas alguna ruta local como C:\ sql server la interpretara como su unidad y no la tuya.
Saludos
Una pregunta el procedimiento me funciono muy bien pero tengo una duda hay forma de cambiar la ruta del archivo que no salga en el servidor, sino en un equipo local que utilice SQL management Studio.
me da este error
Error = [Microsoft][SQL Server Native Client 10.0]Unable to open BCP host data-file
Buenas tardes, te comento que este error suele suceder cuando la ruta de origen es C:\…. intenta cambiar el directorio ejemplo C:\micarpeta\… Si no te funciona mándame la instrucción para poder ayudarte. Saludos
En realidad eso ocurre porque el usuario con el que se ejecuta el servicio SQL (MSSQL) es el NT, el cual no tiene permisos de escritura en el disco.
La solucion es cambiar el usuario del servicio.
Saludos