2010-12-13 92 views

Respuesta

3

Si el archivo está listo para cargar "como- es"(no hay transformaciones de datos o asignaciones complejas requieren), puede utilizar el comando de inserción masiva:

CREATE PROC dbo.uspImportTextFile

AS

BULK INSERT Tablename FROM 'C:\ImportFile.txt' WITH (FIELDTERMINATOR ='|', FIRSTROW = 2)

http://msdn.microsoft.com/en-us/library/ms188365.aspx

+0

Ok, eso es muy útil. La primera fila tendría los nombres de los campos? ¿Hay alguna manera de guardar datos utilizando el comando de copia masiva? He intentado utilizar sqlcmd y bcp dentro de un procedimiento almacenado sin mucho éxito para escribir un archivo. Parece demasiado complicado en comparación con una solución .net clr. Pero las empresas en la naturaleza parecen confiar más en SPROCS y BCP que .net CLR y las funciones de FileStream. Tal vez debido a problemas de implementación. Gracias por la información con respecto al servidor Sql. –

+0

La utilidad bcp es para la línea de comandos (no para consultas). Sin embargo, puede usar xp_cmdshell para ejecutar bcp desde T-SQL. Vea aquí: http: //www.sqlteam.com/article/exporting-data-programatically-with-bcp-and-xp_cmdshell – brian

+0

Además, recuerde que los scripts CLR son compatibles en 2005/2008, por lo que tiene esa opción StreamWriter. Solo requiere habilitar CLR y confiar en el conjunto (ajustes de seguridad ligeramente relajantes). – brian

4

Recomendaría usar SSIS. Está diseñado para hacer este tipo de cosas (especialmente si necesita hacerlo regularmente).

Here is a good link que repasa un archivo de texto y lo inserta en la base de datos.

+0

buena respuesta, utilizando un sproc TSQL normal para esto definitivamente no es el camino a seguir. –

0

¿por qué no utilizar try user functions? De esta forma puede usar .NET para acceder y manejar su archivo.

Control hacia fuera este post

2

La forma más eficiente de la inserción de muchos registros en una tabla es utilizar BULK INSERT (creo que esto es lo que el BCP Utility usos, y así debe ser tan rápido).

BULK INSERT está optimizado para la inserción de grandes cantidades de datos y está destinado a ser utilizado cuando el rendimiento de una declaración simple INSERT simplemente no funcionará.

Si BULK INSERT no es lo que buscas, entonces es posible que desee echar un vistazo al siguiente artículo de una técnica más sencilla:

vinculado en el artículo es una procedimiento almacenado uftReadFileAsTable que parece que debe ser lo suficientemente versátil para lograr lo que busca.

Si no es así, entonces al menos puede utilizar el procedimiento almacenado como un ejemplo de cómo leer archivos en SQL (que utiliza OLE/la Scripting.FileSystemObject)

+2

Probablemente valga la pena agregar que los proxies OLE (sp_OA *) están deshabilitados de manera predeterminada, ya que pueden abrir muchas funcionalidades adicionales, algunas de las cuales pueden no ser deseables, y como tales deben tratarse como un problema de seguridad. –

Cuestiones relacionadas