none
Problema al insertar archivo pdf en campo varbinary(max) RRS feed

  • Pregunta

  • Hola,

    tengo una tabla con esta estructura:

    CREATE TABLE [dbo].[DOCUMENTO](
    	[Id_Doc] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    	[Formato] [varchar](5) NULL,
    	[Nombre] [varchar](100) NULL,
    	[Documento] [varbinary](max) NOT NULL,
    	[ROWGUID] [uniqueidentifier] NOT NULL,
     CONSTRAINT [PK_DOCUMENTO] PRIMARY KEY NONCLUSTERED 
    (
    	[ROWGUID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO


    intento insertar un registro con esta sentencia:

    INSERT INTO DOCUMENTO (Formato, Nombre, Documento)
    SELECT 'PDF' AS Formato, 'prova' AS Nombre,
     * FROM OPENROWSET(BULK N'D:\DOCS\790_Codigo_012.pdf.pdf', SINGLE_BLOB) AS Documento
    GO 

    y me da el siguiente mensaje de error:

    Mens. 4861, Nivel 16, Estado 1, Línea 1
    No se puede realizar la carga masiva. El archivo "B:\CAR\
    Mens. 4861, Nivel 16, Estado 1, Línea 1
    No se puede realizar la carga masiva. El archivo "B:\CAR\790_Codigo_012.pdf.pdf" no se puede abrir. Código de error del sistema operativo: 3(El sistema no puede encontrar la ruta especificada.).
    	

    y el fichero está y además tiene permisos de "Control total" para todo el mundo.

    Realmente no es que tenga que hacerlo así, si hay otra forma de insertar documentos en la BBDD estaré encantado de usarla.

    Un saludo.



    viernes, 24 de febrero de 2012 7:52

Respuestas

Todas las respuestas

  • Hola.

    La carpeta en cuestión, "B:\CAR\", recuerda que debe ser una ruta que del servidor (no de tu propio equipo). Recuerda también que si es una unidad mapeada, mejor usa rutas absolutas, y que para acceder a algo que no se encuentre dentro del servidor necesitas que el servicio de SQL Server se inicie con una cuenta de dominio, no te vale Local System.

    Revisa estos puntos y nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 24 de febrero de 2012 7:55
    Moderador
  • Hola qwalgrande,

    justamente era eso, no he caído en que el archivo estaba en mi pc en lugar de en el servidor.

    Aprovechando el post, otra pregunta, tengo que crear un procedimiento almacenado que será llamado desde una aplicación .net y que permitirá hacer un mantenimiento de esta tabla (alta, baja y modificación).

    ¿Hay otra forma de hacerlo que no sea usando el bulk?

    Un saludo

    viernes, 24 de febrero de 2012 8:20
  • Me respondo a mi mismo, pues ya he encontrado la solución a mi segunda pregunta.

    CREATE PROCEDURE WebUp
    (
    @FileData varbinary(max)
    )
    AS
     
    INSERT INTO BLOBFromWeb
     (BLOBData)
    VALUES
     (@FileData);

    Un saludo y gracias por la ayuda

    viernes, 24 de febrero de 2012 13:50
  • Puede trabajar con pdf ficheros con asistencia de ¿Cómo reparar archivos PDF dañados?

    Este articulo http://www.pdf.repairtoolboxx.com/es te sugerira como resolver tal tarea

    martes, 6 de agosto de 2013 9:29