sql server - tipo - Servidor MS SQL: inserción masiva en una red
no se puede conectar a local sql server 2014 (5)
Lo he hecho antes, y probé ambas opciones.
Al final, hice lo opuesto a la opción 1. Compartir un directorio en el servidor de bases de datos que la aplicación pueda encontrar. No tiene que lidiar con problemas de ancho de banda durante la inserción masiva.
La opción del servidor FTP funciona si le preocupa especialmente la seguridad o la transferibilidad.
Una última opción (tenga mucho cuidado) es usar DTS con un servidor SQL localizado. Puede ser más seguro. Si lo haces mal, será mucho menos eficiente.
Tengo una aplicación que usa MS SQL Server para la cual necesitaré hacer una inserción masiva desde un archivo. El problema es que la base de datos y mi aplicación se alojarán en servidores separados. ¿Cuál es la mejor forma de hacer una inserción masiva en una red? Dos ideas que se me ocurrieron hasta ahora:
Desde el servidor de aplicaciones, comparta un directorio que el servidor de bases de datos puede encontrar, y realice la importación utilizando una declaración de inserción masiva desde el archivo remoto
Ejecute un servidor FTP desde el servidor db: cuando se realiza la importación, simplemente transfiera el archivo al servidor db y realice la importación mediante una inserción masiva desde el archivo local (me inclino por esta opción).
¿Alguien más puede decirme si hay una mejor manera de hacerlo, o si no, cuál tiene más sentido y por qué?
No estoy seguro acerca de 2k08 ya que hay algunas utilidades adicionales para copiar archivos entre servidores. FTP será el más rápido de los dos, porque no usa el sistema de archivos de la ventana para transferir el archivo. (hay gastos generales, pero a menos que el archivo sea grande, puede ser insignificante). Existen otras ventajas de no usar un recurso compartido, como el servidor remoto con el acceso limitado al archivo.
No estoy de acuerdo con cmartin acerca de agregar un recurso abierto al servidor db. En general, no desea abrir archivos compartidos al servidor de base de datos, ya que generalmente se considera un riesgo de seguridad, y muchos lugares no lo permitirán. Dicho esto, negaría que haya transferido el archivo a otra ubicación para usar la importación masiva.
Si el archivo es lo suficientemente pequeño, entonces la opción ftp puede funcionar (tendrá un duplicado en su cuadro de db). Sin embargo, no veo mucho problema para hacer la opción 1) si tienes una red Gigabit entre los dos con un solo salto.
En realidad, puede colocar el archivo en el servidor de la aplicación y de la base de datos.
Ambos archivos deben ser la misma ruta. Desde el servidor de aplicaciones, el propósito es solo para la selección. El servidor de la base de datos es para la inserción masiva.
Esto es lo que hice para mi cliente y también estuvieron de acuerdo con este simple truco.
Todavía estoy buscando una forma de hacerlo en MS SQL, pero lo que hice en MySQL fue guardar el archivo CSV como un BLOB en una tabla temporal, ejecutar SELECT ... INTO DUMPFILE en un directorio local al servidor de bases de datos, luego ejecute la instrucción regular LOAD DATA en ese archivo local (EDIT: Siento que debo señalar, esto fue antes de que LOAD DATA LOCAL estuviera disponible).
Creo que spWriteStringToFile lo hará.
EDITAR: estoy en algo.
comm.CommandText = @"EXEC spWriteStringToFile @data, ''c:/datadumps'', ''data.csv'';
BULK INSERT my_table FROM ''c:/datadumps/data.csv'';";
comm.Parameters.AddWithValue("data", File.ReadAllText(path));
comm.ExecuteNonQuery();