none
Subir archivo a una tabla RRS feed

  • Pregunta

  • Estimados.

    Desde Management necesito subir unos archivos word y luego poder "descargarlo"

    Para pruebas tengo la tabla A con un campo archivo de tipo VARBINARY MAX

    Hago esto:

    BULK INSERT A
       FROM 'C:\TEST\TEST.txt';  
    GO  

    Y me da error:

    Error de conversión de datos de carga masiva (tipo no coincidente o carácter no válido para la página de códigos especificada) en la fila 1, columna 1 (archivo).

    Supongo que es otra la forma de subir un archivo.


    DBA SQL Server Santiago/Chile

    jueves, 27 de septiembre de 2018 16:14

Respuestas

  • Hola CMAPM:

    CREATE TABLE Archivos
    (Id          INT,
     descripcion VARCHAR(50) NOT NULL,
     documento   VARBINARY(MAX) NOT NULL
    );
    GO
    BEGIN TRY
        INSERT INTO Archivos
    (Id,
     descripcion,
     documento
    )
               SELECT 1,
                      'ejemplo',
                      BulkColumn
               FROM OPENROWSET(BULK 'C:\archivos\texto.txt', SINGLE_BLOB) AS documento;
    END TRY
    BEGIN CATCH
        PRINT 'error';
    END CATCH;
    SELECT *
    FROM Archivos;

    Salida:

    Posteado aquí

    Un saludo

    • Marcado como respuesta CMAPM jueves, 27 de septiembre de 2018 17:38
    jueves, 27 de septiembre de 2018 16:49
  • Hola CMAPM:

    Puedes hacerlo por medio de BCP

    Cmd:

    Bcp "select documento from basedatos.dbo.Archivos where id=1" queryout "c:\ruta\nombrearchivo.txt" -T

    BCP nos preguntará el tipo de almacenamiento varbinary(max): enter

    Longitud del prefijo del documento (8): 0

    Longitud del campo del documento (0): enter

    Escriba el terminador del campo: enter

    Desea guardar la información en un archivo [s/n]: s

    Salida:

    Bcp dispone de infinidad de parámetros, que puedes consultar, para hacer exportaciones masivas

    Espero te ayude

    • Marcado como respuesta CMAPM viernes, 28 de septiembre de 2018 12:49
    viernes, 28 de septiembre de 2018 5:32

Todas las respuestas

  • Hola,

    ¿Es muy necesario que lo subas desde sql? En caso contrario podrías hace un pequeño programa en consola para elegir un archivo y luego obtener los bytes y estos enviarlos a tu tabla.

    Podrías hacer algo similar a esto:

    https://msdn.microsoft.com/es-es/library/bb972266.aspx

    jueves, 27 de septiembre de 2018 16:49
  • Hola CMAPM:

    CREATE TABLE Archivos
    (Id          INT,
     descripcion VARCHAR(50) NOT NULL,
     documento   VARBINARY(MAX) NOT NULL
    );
    GO
    BEGIN TRY
        INSERT INTO Archivos
    (Id,
     descripcion,
     documento
    )
               SELECT 1,
                      'ejemplo',
                      BulkColumn
               FROM OPENROWSET(BULK 'C:\archivos\texto.txt', SINGLE_BLOB) AS documento;
    END TRY
    BEGIN CATCH
        PRINT 'error';
    END CATCH;
    SELECT *
    FROM Archivos;

    Salida:

    Posteado aquí

    Un saludo

    • Marcado como respuesta CMAPM jueves, 27 de septiembre de 2018 17:38
    jueves, 27 de septiembre de 2018 16:49
  • Muchas Gracias, y ahora como podria "rescatar dicho documento para poder verlo"

    DBA SQL Server Santiago/Chile

    jueves, 27 de septiembre de 2018 17:39
  • Hola CMAPM:

    Puedes hacerlo por medio de BCP

    Cmd:

    Bcp "select documento from basedatos.dbo.Archivos where id=1" queryout "c:\ruta\nombrearchivo.txt" -T

    BCP nos preguntará el tipo de almacenamiento varbinary(max): enter

    Longitud del prefijo del documento (8): 0

    Longitud del campo del documento (0): enter

    Escriba el terminador del campo: enter

    Desea guardar la información en un archivo [s/n]: s

    Salida:

    Bcp dispone de infinidad de parámetros, que puedes consultar, para hacer exportaciones masivas

    Espero te ayude

    • Marcado como respuesta CMAPM viernes, 28 de septiembre de 2018 12:49
    viernes, 28 de septiembre de 2018 5:32