Nuevas Características SQL Server 2008 – FILESTREAM
Blog Sunday, June 29 2008Lo primero que hay que mencionar cuando hablamos de FILESTREAM es que no es en si un nuevo tipo de datos sino que es un modificador sobre el tipo de datos VARBINARY, es decir, es el mismo tipo de datos VARBINARY que conocemos (con todo y lo que conlleva) pero que si lo extendemos ese tipo de datos con el modificador FILESTREAM entonces tenemos acceso a las nuevas características.
Al momento del CTP de Febrero 2008 el uso de FILESTREAM estaba deshabilitado de forma predeterminada y la única forma de habilitarlo era con el procedimiento almacenado del sistema sp_filestream_configure. Simplemente lo ejecutamos indicando los valores de los parámetros necesarios que se indican a continuación.
sp_filestream_configure [ [ @enable_level = ] level ]
[ [ , @share_name = ] 'share_name' ] ;
Donde:
@enable_level es un valor que le dice a SQL Server si se habilita o no y el nivel de acceso.
@share_name es el nombre con el que se va a publicar la información de este tipo de datos con el modificador.
Los valores posibles de @enable_level son:
| Valor | Significado |
| 0 | Deshabilitado. Es el valor predeterminado. |
| 1 | Habilitado pero nada más para usarse vía T-SQL. |
| 2 | Habilitado para T-SQL y acceso local vía filesystem. |
| 3 | Habilitado para T-SQL y acceso local y remoto vía filesystem. |
Un ejemplo sería:
sp_filestream_configure
@enable_level = 3,
@share_name = "SqlServerShare";
Y el resultado se vería así:

Bien, ya preparamos la instancia. Ahora tenemos que crear una base de datos que tenga por lo menos un archivo indicado para guardar la información. Este archivo debe de pertenecer a un FILEGROUP de tipo FILESTREAM.
Un ejemplo:
CREATE DATABASE
[Prueba]
ON PRIMARY (
NAME = N'PruebaData',
FILENAME = N'C:\Temp\PruebaData.mdf',
SIZE = 3072KB,
FILEGROWTH = 1024KB),
FILEGROUP [FilestreamGroup]
CONTAINS FILESTREAM (
NAME = N'PruebaFilestream',
FILENAME = N'C:\Temp\PruebaFilestream')
LOG ON
( NAME = N'PruebaLog',
FILENAME = N'C:\Temp\PruebaLog.ldf',
SIZE = 1024KB,
FILEGROWTH = 10%);
GO
Excelente. Con la base de datos ya creada y lista podemos crear nuestra tabla la cual contenga un campo del tipo VARBINARY con al atributo FILESTREAM ¿cierto? Si, así es… siempre y cuando cumplamos con unos requisitos adicionales. La tabla debe de tener un campo identidad que use GUIDs.
La instrucción para crear la tabla sería como esto:
CREATE TABLE LaTabla (
IdTabla UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL PRIMARY KEY,
Descripción NVARCHAR(50) NOT NULL,
Foto VARBINARY(MAX) FILESTREAM NOT NULL
);
Ahora, insertar un campo vía T-SQL podría ser así:
INSERT INTO LaTabla
VALUES (NEWID(), 'Registro 1', CAST('Ejemplo 1' AS VARBINARY(MAX)));
Por supuesto, esto no es que digamos útil. Para hacerlo desde nuestras aplicaciones tendríamos que usar llamadas al API de Windows o al API de SQL Native Client… o esperar al SP1 de Visual Studio 2008 y a la versión final de SQL Server 2008.
Más post de la serie:
- IntelliSense
- Compresión de Respaldos
- FILESTREAM
- PowerShell
There are no comments yet...Kick things off by filling out the form below.