SQL Server - Insertar Imágenes mediante proced almacenado

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 6 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar Imágenes mediante proced almacenado

Publicado por Cristian (14 intervenciones) el 08/11/2021 02:41:28
Hola:
Arme el siguiente código para insertar imágenes a una aplicación usando FILESTREAM:

INSERT INTO DBO.IMG_FS2
VALUES ( NEWID(),'',
(SELECT * FROM OPENROWSET(BULK N'D:\COMPUSOF\ColegioMDLL\Bin\$.GIF', SINGLE_BLOB) as FS),
'8003','CERTIFICADO','ALTA','CRISTIAN','2021/11/07','20:54:54',' ',' ',' ')

El código es ejecutado en embebido dentro de la APP y funciona correctamente

Ahora la idea es hacerlo mediante procedimiento almacenado ya que cuando ejecuto la aplicación en una red, si la imagen se encuentra en una maquina cliente, la inserción no se realiza. Si el código lo ejecuto dentro del sql server, la inserción si se realiza por lo que quiero probar mediante un procedimiento almacenado pero no estoy pudiendo crearlo ya que al hacerlo me tira el siguiente error


Mens 102, Nivel 15, Estado 1, Procedimiento USP_Insertando_Imagen, Línea 13
Sintaxis incorrecta cerca de '@CONTENIDO'.

El script que escribo para crear el procedimiento es el siguiente:

CREATE PROCEDURE USP_Insertando_Imagen
@DESCRIPCION VARCHAR(255),
@CONTENIDO VARBINARY(MAX),
@IdNumLegajo INT,
@TipoFoto CHAR(25),
@Estado CHAR(10),
@Usuario CHAR(25),
@FechaAlta DATE,
@HoraAlta CHAR(8)
AS
INSERT INTO DBO.IMG_FS2
VALUES ( NEWID(),@DESCRIPCION,
(SELECT * FROM OPENROWSET(BULK @CONTENIDO, SINGLE_BLOB) as FS),
IdNumLegajo,@TipoFoto,@Estado,@Usuario,@FechaAlta,@HoraAlta,' ',' ',' ')


La estructura de la tabla es la siguiente

ID INT IDENTITY,
ID2 UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE,
DESCRIPCION VARCHAR(255),
CONTENIDO VARBINARY(MAX) FILESTREAM,
IdNumLegajo INT,
TipoFoto CHAR(25),
Estado CHAR(10),
Usuario CHAR(25),
FechaAlta DATE,
HoraAlta CHAR(8),
ModificadoPor CHAR(25),
FechaUltimaModificacion DATE,
HoraModificacion CHAR(8)

Alguien puede darme una mano? que estare haciendo mal?
Estoy usando SLQ Server Express 2014
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar Imágenes mediante proced almacenado

Publicado por Isaias (4558 intervenciones) el 09/11/2021 15:38:40
El problema que tienes son de PERMISOS, el usuario que arranca los servicios de SQL Server debe ser un usuario de ACTIVE DIRECTORY con los permisos necesarios para ver las maquinas donde estan almacenadas las imagenes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar Imágenes mediante proced almacenado

Publicado por Isaias (4558 intervenciones) el 09/11/2021 15:39:48
¿Que valor contiene la variable @CONTENIDO?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1
Ha disminuido su posición en 6 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar Imágenes mediante proced almacenado

Publicado por Cristian (14 intervenciones) el 09/11/2021 20:08:31
La variable @CONTENIDO, llevaría la ruta de de ubicación del archivo a guardar. En el ejemplo llevaria algo como lo siguiente:
'D:\COMPUSOF\ColegioMDLL\Bin\$.GIF'

Este script es el código que uso dentro de la aplicación, en embebido, DONDE <39> son comillas, & es para concatenar los textos con las variables, | esto es un salto de lineal: (como aclare, mientras la APP se ejecuta en la PC del servidor, enda OK, pero en una cliente, no guarda nada)

'INSERT INTO DBO.IMG_FS2 VALUES ( ' &|
' NEWID(),<39>'&clip(IMG:Descripcion)&'<39>,'&|
' (SELECT * FROM OPENROWSET(BULK N<39>'&CLIP(LOC:Ubicacin )&'<39>,'&|
' SINGLE_BLOB) as FS),<39>'&clip(IMG:IDNumLegajo)&'<39>,'&|
'<39>'&clip(IMG:TipoFoto)&'<39>,'&|
'<39>'&clip(IMG:Estado)&'<39>,'&|
'<39>'&clip(IMG:Usuario)&'<39>,'&|
'<39>'&FORMAT(TODAY(),@D10)&'<39>,'&|
'<39>'&CLIP(IMG:HoraAlta)&'<39>,'&|
'<39> <39>,'&|
'<39> <39>,'&|
'<39> <39>)'

Al ejecutar, se traduce, por ejemplo en:

INSERT INTO DBO.IMG_FS2
VALUES ( NEWID(),'',
(SELECT * FROM OPENROWSET(BULK N'D:\COMPUSOF\ColegioMDLL\Bin\$.GIF', SINGLE_BLOB) as FS),
'8003','CERTIFICADO','ALTA','CRISTIAN','2021/11/07','20:54:54',' ',' ',' ')

Me da la sensación que es un error de sintaxis producto, justamente, de esta variable y se da en esta sección ( N'D:\...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar Imágenes mediante proced almacenado

Publicado por Isaias (4558 intervenciones) el 12/11/2021 16:12:59
¿Y la opcion de FILESTRIM no te sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar Imágenes mediante proced almacenado

Publicado por Cristian Canteros (14 intervenciones) el 13/11/2021 19:35:59
Es la que estoy usando. El código que uso permite el tratamiento de imágenes con el filestream. Al querer hacer un procedimiento almacenado con dicho código, no me permite crearlo. Me tira el error que comento y no logro solucionarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar Imágenes mediante proced almacenado

Publicado por Isaias (4558 intervenciones) el 16/11/2021 16:19:13
¿La cuenta que arranca los servicios de SQL Server es de Active Directory y tiene los permisos necesarios sobre la carpeta alojada en el disco D?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1
Ha disminuido su posición en 6 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar Imágenes mediante proced almacenado

Publicado por Cristian (14 intervenciones) el 18/11/2021 01:45:11
Isaías: "los servicios de SQL Server es de Active Directory" esto ya me excede mis conocimientos. No soy programador experimentado, solo he realizado unas pequeñas aplicaciones desktop, y solo dos usando SQL Server, además de que no manejo redes mas allá de lo básico. De todas maneras lo resolví de la siguiente manera
- Crear una carpeta compartida en el server
- Subir a la carpeta compartida los archivos de imágenes
- Acceder desde el sistema a esa carpeta compartida para guardarla en el sistema usando el filestream.

No pude crear el procedimiento almacenado, que era la idea, así que por ahora sigo usando la forma embebida dentro del sistema.
Muchas gracias por tu colaboración.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar Imágenes mediante proced almacenado

Publicado por Isaias (4558 intervenciones) el 18/11/2021 01:49:02
Buenos el problema son de PERMISOS, el usuario que arranca los servicios de SQL Server, debe tener PERMISOS SUFICIENTES sobre la carpeta donde se almacenaran los archivos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar