Cómo crear y utilizar SQL Server FileTables: paso a paso
Guardar y gestionar archivos (documentos, imágenes) en una base de datos puede simplificar backups y permisos. Las FileTables en SQL Server permiten almacenar archivos en el sistema de archivos y, al mismo tiempo, gestionar metadatos y permisos desde SQL Server, ideal para aplicaciones que mezclan datos relacionales y archivos.
Requisitos previos
- Instancia de SQL Server 2012 o superior con FILESTREAM habilitado.
- Permisos de administrador en el servidor para cambiar la configuración de SQL Server y crear carpetas en el servidor de archivos.
- SQL Server Management Studio (SSMS) o cliente T-SQL.
Paso 1: Activar FILESTREAM a nivel de servidor
Las FileTables dependen de FILESTREAM. Primero activamos FILESTREAM en las propiedades del servidor y a nivel del servicio. En SSMS: hacemos clic en el nombre del servidor → Properties → Advanced → habilitar "Enable FILESTREAM for Transact-SQL access" y, si es necesario, "Allow remote client access". Después reiniciamos el servicio SQL Server.
Paso 2: Configurar el servidor con T-SQL (opcional)
También es posible configurar con T-SQL para garantizar que está activo y configurado para acceso Transact-SQL y File I/O.
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'filestream access level', 2; -- 0=off,1=T-SQL,2=Full access
RECONFIGURE;
Paso 3: Crear una base de datos con FILESTREAM y FileTable
Se crea una base de datos con un filegroup FILESTREAM apuntando a una carpeta. Esto define dónde se almacenarán los archivos en el servidor de archivos.
CREATE DATABASE DemoFileTable
ON PRIMARY (NAME = DemoFileTable_data, FILENAME = 'C:\SQLData\DemoFileTable.mdf'),
FILEGROUP FileStreamGroup CONTAINS FILESTREAM (NAME = DemoFileTable_filestream, FILENAME = 'C:\SQLData\FileStream')
LOG ON (NAME = DemoFileTable_log, FILENAME = 'C:\SQLData\DemoFileTable_log.ldf');
GO
Paso 4: Crear una tabla FileTable
Una FileTable funciona como una tabla normal, con columnas fijas y una conexión al sistema de archivos. Es necesario activar algunas opciones y crear la tabla con la opción AS FileTable.
USE DemoFileTable;
GO
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
-- Asegurarse de que FILESTREAM está disponible en la base de datos
ALTER DATABASE CURRENT SET FILESTREAM (NON_TRANSACTED_ACCESS = FULL);
GO
CREATE TABLE Docs AS FileTable
WITH (FileTable_Directory = 'DocsDirectory', FileTable_Collate_Filename = DATABASE_DEFAULT);
GO
Paso 5: Insertar y acceder a archivos (ejemplo)
Puedes insertar archivos vía T-SQL (usando Openrowset BULK para cargar) o copiar directamente a la carpeta de la FileTable en el servidor. Ejemplo T-SQL para insertar metadatos y un archivo:
-- Insertar un archivo binario como varbinary y luego actualizar a la FileTable
-- Método más simple: copiar el archivo a la carpeta de la FileTable en el servidor
-- Ejemplo de lectura de metadatos de la FileTable
SELECT file_stream, name, file_type, creation_time
FROM Docs
WHERE name = 'exemplo.txt';
Paso 6: Acceder a los archivos vía sistema de archivos
Cada FileTable expone una carpeta en el servidor. En el servidor SQL, navega hasta la carpeta configurada (ej.: C:\SQLData\FileStream\DocsDirectory). Copia archivos a la carpeta y ellos aparecen como registros en la tabla; borrar un registro borra el archivo.
Verificar el resultado
Confirma que la tabla contiene registros y que los archivos aparecen en la carpeta del sistema de archivos. Ejecuta:
SELECT TOP 10 stream_id, name, file_type, file_stream.PathName() AS FilePath
FROM Docs;
Verifica en la carpeta física que los archivos listados existen. Si no aparecen, revisa errores comunes: FILESTREAM no activo, permisos de la carpeta, o filegroup mal definido.
Conclusión
Las FileTables facilitan gestionar archivos y metadatos en SQL Server, simplificando backups y permisos centralizados. Próximos pasos: implementar control de permisos NTFS para la carpeta de la FileTable, probar rendimiento e integrar con aplicaciones que leen archivos directamente de la carpeta. Consejo: prueba a copiar un archivo grande y observa cómo SQL Server genera un registro en la tabla — esto ayuda a comprender la sincronización FileTable/FS.