none
Ejecutar BULK INSERT desde un servidor remoto

    Question

  • Solicito la ayuda del foro por lo siguiente:

    Tengo una aplicación en un Servidor de un Host, que importa archivos ASCII a una tabla en SQL, para ello uso este BULK INSERT:

    BULK INSERT TablaDelTextoPlano
    FROM 'c:\ArchivoASCIIaConvertir.txt'
    WITH (FORMATFILE = 'c:\SeparadoresDeColumnas.FMT');
    GO

    El usuario entra a internet y ve la aplicación ASP que está depositada en un servidor, mientras que la Base de Datos está en otro servidor.
    Al ejecutar la sentencia BULK INSERT, se busca el archivo del formato "SeparadoresDeColumnas.FMT" en la unidad "c:\" del Servidor donde está la BD, no en la unidad "c:\" del servidor donde está depositada la aplicación ASP o la unidad "c:\" del propio usuario.
     
    Por lo anterior, me pueden asesorar en cómo decirle a BULK INSERT que lea la unidad "c:\" de otro servidor o la unidad "c:\" del usuario?
    O en su defecto, ¿se puede "incrustar" dentro del BULK INSERT el script de como separar las columnas? (Nota: son columnas de ancho fijo, no hay tabuladores, comas, etc.), para no tener que llamar el archivo externo "SeparadoresDeColumnas.FMT" y olvidarme del tema de los distintos servidores.

    Muchas gracias por cualquier aportación.



    Saturday, February 20, 2010 6:57 PM

Answers

  • Hola.

    En cuanto al fichero ""ArchivoASCIIaConvertir.txt", en la unidad C:\ del usuario es mejor que ni te lo propongas por las implicaciones de seguridad que tendría. En la unidad C:\ del servidor web sería factible, sólo tendrías que usar la ruta UNC (algo así como "\\servidorweb\rutacompartida\Mifichero.txt").

    Pero si tu único problema es el fichero de formato, en cuanto al formato, no creo que necesites indicarle un fichero de formato, por lo que comentas. Si miras en http://msdn.microsoft.com/es-es/library/ms188365.aspx, podrás comprobar que necesitas un formato si el fichero tiene más o menos columas que la tabla, los separadores no son siempre los mismos, etc.

    Si no lo consigues, nos dices.

    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Saturday, February 20, 2010 8:07 PM
    Moderator

All replies

  • Hola.

    En cuanto al fichero ""ArchivoASCIIaConvertir.txt", en la unidad C:\ del usuario es mejor que ni te lo propongas por las implicaciones de seguridad que tendría. En la unidad C:\ del servidor web sería factible, sólo tendrías que usar la ruta UNC (algo así como "\\servidorweb\rutacompartida\Mifichero.txt").

    Pero si tu único problema es el fichero de formato, en cuanto al formato, no creo que necesites indicarle un fichero de formato, por lo que comentas. Si miras en http://msdn.microsoft.com/es-es/library/ms188365.aspx, podrás comprobar que necesitas un formato si el fichero tiene más o menos columas que la tabla, los separadores no son siempre los mismos, etc.

    Si no lo consigues, nos dices.

    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Saturday, February 20, 2010 8:07 PM
    Moderator
  • Hola Alberto, gracias por responder.

    Efectivamente, mi problema es el Archivo o Fichero de Formato FMT.
    En mi caso, las columnas son de ancho fijo, siempre en el mismo orden y siempre cargo todas las columnas.
    ¿Sugieres que no es necesario que use el fichero FMT?

    En la liga que muestras vienen varios ejemplos de como cargar texto plano, pero todos ellos usan el fichero FMT (o xml)  y los que no, usan algún tipo de separador.

    ¿Sabes como dentro del BULK INSERT indicarle el ancho de columna como separador (en lugar de un caracter) sin tener que usar el fichero FMT?

    Gracias por los consejos


    Sunday, February 21, 2010 6:49 AM
  • Hola.

    He releído tu post inicial para darme cuenta de un detalle importante: no tienes separadores. Y ese es uno de esos casos que requieren de un fichero de formato. Así que tendrás que usarlo, puedes utilizar la misma técnica que con el fichero de datos, especificar una ruta UNC. También puedes copiar el fichero en la ruta que desee dentro del servidor, si es que este no varía.



    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Sunday, February 21, 2010 7:49 AM
    Moderator
  • Muy bien Alberto,

    Voy a intentar tu sugerencia,

    Gracias por el apoyo.
    Sunday, February 21, 2010 8:21 AM