SQL Server - No se importar y exportar TXT

   
Vista:

No se importar y exportar TXT

Publicado por andres (27 intervenciones) el 21/03/2010 00:39:00
buenas gente

Sobre sql server 2005, necesito crear 2 store procedure

1-Desde el servidor 1, importar una tabla (tbl1) a archivo TXT (tbl1.txt)
2-En el servidor 2 leer el archivo TXT (tbl1.txt) y actualizar una tabla (tbl2)

se que existe la opcion Servidores Vinculado, pero el cliente no desea esa solucion, sino hacerlo por medio de archivos planos.

No tengo ni idea de como se hace, alguien puede facilitarme estos 2 store y explicarme sus instruccciones?

... gracias de antemano, pues esta tarea pedida me compromete por el poco tiempo que tengo de resolver.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

RE:No se importar y exportar TXT

Publicado por Isaias (3186 intervenciones) el 22/03/2010 17:14:26
¿Proporcionarte los stores?, o sea, quieres que los hagamos y te los enviemos.

Seria bueno que consultaras sobre BCP.EXE, este te puede crear tu archivo texto

Y con BULKINSERT, importas dicho archivo texto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se importar y exportar TXT

Publicado por Pedro (80 intervenciones) el 23/03/2010 19:46:51
Una alternativa que se puede implementar es hacer un SSIS y lo ejecutas desde un bat de DOS directamente. Podes tener controlado los errores e incluso el proceso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se importar y exportar TXT

Publicado por andres (27 intervenciones) el 23/03/2010 20:33:34
Gracias Pedro por el dato, pero he resuelto el Sp de Exportacion por medio del siguiente codigo, lo he logrado gracias a la ayuda de otro sitio que realmente me han dado ejemplos de codigo, lo que revise es adecuarlo a mi necesidad por parametros, lo que me esta faltando es pder importar desde TXT a Tabla por medio de parametros.



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- =============================================
-- Description : IMPORTA DATOS DE UNA TABLA A UN ARCHIVO PLANO
--
-- @SERVER_NAME = Nombre de servidor donde se encuentra la tabla (ej.'SQL234')
-- @Tabla = Nombre de la tabla que se desea importar a un archivo (ej. 'Clientes')'
-- @Folder_Path = Ruta de directorio donde se guardara el archivo importado (ej. 'D:\planos')
-- @FILE_TYPE = Extension de tipo de archivo a exportar (ej. 'TXT' 'DOC')
-- @FILTRO = Condicion en el where de la tabla seleccionada (ej. 'id=2')
--
-- @Tabla = 'TEST2'
-- @Folder_Path = 'D:\'
-- @SERVER_NAME = 'AX'
-- @FILE_TYPE = 'TXT' -- EXCEL OR DATAFILES LIKE TXT OR DOC
-- @FILTRO = 'id=2 or codigo=234'
--
-- Ejemplo de uso : Execute exporta_tbl 'SRVAX','TEST','D:\','TXT',''
-- Ejemplo de uso : Execute exporta_tbl 'SRVAX','TEST','D:\','TXT','ID=2 OR CODIGO=234'
--
-- =============================================
ALTER PROCEDURE [dbo].[exporta_tbl] @SERVER_NAME sysname,@Tabla sysname,@Folder_Path sysname,@FILE_TYPE varchar(5),@FILTRO varchar(50)
as
BEGIN

declare @tables table( tid int identity,tname sysname)
declare @index int
declare @Max int
declare @QUERY varchar(4000)
declare @QUERY1 varchar(4000)
declare @Tname sysname
declare @DBNAME SYSNAME

insert into @tables (tname)
select name from sysobjects where xtype='u'

set @Max = @@identity

SET @DBNAME = DB_NAME()
SET @QUERY =''
SET @QUERY1 =''
SET @Index = 1

WHILE @index <= @max
Begin
SELECT @Tname = tname from @tables where tid = @Index

if @Tname=@TABLA
set @index = @max+1
else
set @Index = @Index + 1
end

SET @QUERY1 ='SELECT '
SELECT @QUERY1 = @QUERY1 + '''' + QUOTENAME( NAME ,'''') + ''' AS ' + NAME + ' ,' FROM SYSCOLUMNS where id = object_id(@tname)
SET @QUERY1 = LEFT( @QUERY1,LEN( @QUERY1 ) - 1 )

SET @QUERY='SELECT '
SELECT @QUERY = @QUERY + 'CAST('+NAME + ' AS VARCHAR('+ LTRIM( STR( LENGTH )) +')),' FROM SYSCOLUMNS where id = object_id(@tname)

if LEN(@filtro)>0
SET @QUERY = LEFT( @QUERY,LEN( @QUERY ) -1 ) +' FROM '+@DBNAME+'.dbo.'+ @TNAME+' WHERE '+@FILTRO
ELSE
SET @QUERY = LEFT( @QUERY,LEN( @QUERY ) -1 ) +' FROM '+@DBNAME+'.dbo.'+ @TNAME

SET @QUERY1 = @QUERY1 + ' UNION ALL ' + @QUERY

SELECT @Query= 'master.dbo.xp_cmdshell
''bcp.exe "'+@QUERY1 + ' " queryout "'+@Folder_Path+'\' + @tname + '.'+@FILE_TYPE +'" -c -t"," -r"\n" -F2 -T -S '+@SERVER_NAME +''''

EXECUTE(@Query)

END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

RE:No se importar y exportar TXT

Publicado por Isaias (3186 intervenciones) el 23/03/2010 23:22:47
Bueno, fue realmente la referencia dada, BCP.EXE

Ahora, de este codigo, unicamente cambia el EXECUTE(@QUERY), por EXEC SP_EXECUTESQL (@QUERY), asegurate que @QUERY sea de tipo NVARCHAR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se importar y exportar TXT

Publicado por Tiburoncin (9 intervenciones) el 26/03/2010 16:44:47
Andres,
Me parece mucha chamba para algo que se puede hacer con una sola linea utilizando el comando bcp, te recomiendo que chequees.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se importar y exportar TXT

Publicado por andres (27 intervenciones) el 29/03/2010 21:44:29
El ejemplo original lo que hacia era barrer todas las tablas de una base de datos y exportaba a txt cada una de esas tablas, o sea era un exportacion masiva, lo que necesitaba era un SP general para ser utilizado segun conveniencia, como ejemplo me sirvio porque me lleva a investigar sobre comandos que no se bien como funcionan, para mi los ejemplos son igual o mas importantes que la teoria porque me obliga a entender linea por linea que es lo que hace, eso me lleva a leer la teoria, para darte un ejemplo si no fuera por este SP no entendia el help del sql server en lo que se refiere a parametros -T -c ... etc, siempre estuve disconforme con el help de sql server, es bastante confuso para leer y encontrar el punto que te interesa, de todos modos como posible optimizacion seguire tu consejo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar