Insertar imágenes desde SQL Server Management Studio

Insertar imágenes en un campo Image desde SQL Server

Al crear una tabla, es necesario con regularidad almacenar las imágenes de los registros, por ejemplo, la imagen de un empleado, la imagen de un producto, la imagen de una intervención quirúrgica, las fotos de un auto siniestrado en un sistema de seguros vehiculares, etc.

Las imágenes pueden ocupar un poco mas de espacio en el disco que los datos de tipo texto o los datos numéricos así como las fechas, si van a ser muchos registros, es recomendable separar las imágenes en un grupo de archivos diferente de donde están los datos del mismo registro  usando la partición vertical de la tabla. (Ver Partición Vertical)

Ejemplo

En este ejemplo se creará una base de datos y luego crear dos tablas, una con empleados y otra con productos. Luego insertaremos los registros incluyendo las fotos de los empleados y las imágenes de los productos. (Ver Insertar Registros)

Para que los ejercicios funcionen, antes de ejecutar los scripts, cree las carpetas e inserte en ellas las imágenes a insertar.

Las fotos de los empleados se ubicarán en la carpeta D:\EmpleadosFotos y las imágenes de los productos estarán  en la carpeta D:\ProductosImagenes

La base de datos

Create database BaseImagenes
go
use BaseImagenes
go

La tabla para Empleados

Create table Empleados
(
EmpleadosCodigo nchar(6),
EmpleadosPaterno varchar(50),
EmpleadosMaterno varchar(50),
EmpleadosNombre varchar(50),
EmpleadosFechaNacimiento Date,
EmpleadosEstado nchar(1),
EmpleadosFoto Image,
constraint EmpleadosPK primary key (EmpleadosCodigo)
)
go

Insertar los empleados.

insert into Empleados (EmpleadosCodigo, EmpleadosPaterno,
EmpleadosMaterno, EmpleadosNombre, EmpleadosFechaNacimiento,
EmpleadosEstado, EmpleadosFoto)
select ‘PR3498’, ‘Campos’,’Pardo’,’Luis’,’15/01/1997′, ‘A’, *
from OpenRowset(Bulk ‘D:\EmpleadosFotos\CamposPardoLuis.jpg’, Single_Blob) As EmpleadosFoto
go

insert into Empleados (EmpleadosCodigo, EmpleadosPaterno,
EmpleadosMaterno, EmpleadosNombre, EmpleadosFechaNacimiento,
EmpleadosEstado, EmpleadosFoto)
select ‘TF9085’, ‘Chávez’,’Terranova’,’Ingrid’,’10/02/1999′, ‘A’, *
from OpenRowset(Bulk ‘D:\EmpleadosFotos\ChavezTerranovaIngrid.jpg’, Single_Blob) As EmpleadosFoto
go

insert into Empleados (EmpleadosCodigo, EmpleadosPaterno,
EmpleadosMaterno, EmpleadosNombre, EmpleadosFechaNacimiento,
EmpleadosEstado, EmpleadosFoto)
select ‘PW0974’, ‘Pereda’,’Smith’,’Marco’,’18/09/1989′, ‘A’, *
from OpenRowset(Bulk ‘D:\EmpleadosFotos\PeredaSmithMarco.jpg’, Single_Blob) As EmpleadosFoto
go

insert into Empleados (EmpleadosCodigo, EmpleadosPaterno,
EmpleadosMaterno, EmpleadosNombre, EmpleadosFechaNacimiento,
EmpleadosEstado, EmpleadosFoto)
select ‘FT4503’, ‘Villa’,’Benavente’,’Anne’,’13/03/1983′, ‘A’, *
from OpenRowset(Bulk ‘D:\EmpleadosFotos\VillaBenaventeAnne.jpg’, Single_Blob) As EmpleadosFoto
go

insert into Empleados (EmpleadosCodigo, EmpleadosPaterno,
EmpleadosMaterno, EmpleadosNombre, EmpleadosFechaNacimiento,
EmpleadosEstado, EmpleadosFoto)
select ‘NT4587’, ‘Llanos’,’Saenz’,’Jose’,’17/10/1963′, ‘A’, *
from OpenRowset(Bulk ‘D:\EmpleadosFotos\LlanosSaenzJose.jpg’, Single_Blob) As EmpleadosFoto
go

Note el uso de la función OpenRowSet para insertar la imágen.

Visualizar los empleados
select * from Empleados
go



Productos

Create table Productos
(
ProductosCodigo nchar(6),
ProductosDescripcion varchar(100),
ProductosPrecio Numeric(9,2),
ProductosStock Numeric(9,2),
ProductosEstado nchar(1),
ProductosFoto Image,
constraint ProductosPK primary key (ProductosCodigo)
)
go

Insertar los Productos

insert into Productos (ProductosCodigo, ProductosDescripcion,
ProductosPrecio, ProductosStock, ProductosEstado, ProductosFoto)
select ‘T00799’, ‘Teclado’,85,15,’A’, *
from OpenRowset(Bulk ‘D:\ProductosImagenes\Teclado.jpg’, Single_Blob) As ProductosFoto
go

insert into Productos (ProductosCodigo, ProductosDescripcion,
ProductosPrecio, ProductosStock, ProductosEstado, ProductosFoto)
select ‘T00599’, ‘Monitor’,260,10,’A’, *
from OpenRowset(Bulk ‘D:\ProductosImagenes\Monitor.jpg’, Single_Blob) As ProductosFoto
go

insert into Productos (ProductosCodigo, ProductosDescripcion,
ProductosPrecio, ProductosStock, ProductosEstado, ProductosFoto)
select ‘T00777’, ‘Mouse’,185,25,’A’, *
from OpenRowset(Bulk ‘D:\ProductosImagenes\Mouse.jpg’, Single_Blob) As ProductosFoto
go

Ver el listado de Productos
select * from Productos
go

Uso de la función OpenRowSet

  • Se utiliza la función OPENROWSET para hacer referencia en la cláusula FROM de una consulta como si fuera un nombre de tabla.
  • Esta función OPENROWSET puede hacer referencia como la tabla de destino de una INSERT , UPDATE o DELETE
  • Si la consulta devuelve varios registros, OPENROWSET devuelve sólo el primero.
  • OPENROWSET también permite el uso del proveedor BULK incorporado que permite leer los datos de un archivo de imagen y crear el arreglo de bits para almacenarlo en un campo.