(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como criar e usar Filestream em SQL Server: passo a passo

João Barros 03 de August de 2026 4 min de leitura

Este tutorial mostra como configurar e usar Filestream em SQL Server para armazenar ficheiros grandes no sistema de ficheiros com integridade transaccional. Filestream é útil quando precisa de guardar BLOBs grandes sem sobrecarregar a base de dados, mantendo ACID e desempenho.

Pré-requisitos

  • Instância de SQL Server (Standard/Enterprise ou Express com suporte a Filestream).
  • Permissões de administrador no servidor para activar Filestream e criar pastas.
  • SQL Server Management Studio (SSMS) ou acesso ao sqlcmd.

Passo 1: Activar Filestream a nível de servidor

Filestream deve ser activado ao nível da instância. Isto envolve configurar a opção de arranque do SQL Server e activar o serviço de Filestream no Configuration Manager.

-- 1. Verificar estado (executar no SSMS):
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'filestream access level';

-- 2. Definir acesso (0 = off, 1 = Transact-SQL, 2 = T-SQL + Win32):
EXEC sp_configure 'filestream access level', 2;
RECONFIGURE;

Depois de executar isto, abra o SQL Server Configuration Manager e, na instância, active o serviço de Filestream na aba de propriedades (se aplicável) e reinicie a instância do SQL Server.

Passo 2: Criar um Filegroup Filestream e pastas no sistema de ficheiros

É necessário um filegroup do tipo Filestream que referencia uma pasta no sistema de ficheiros. Crie primeiro a pasta com permissões adequadas e depois adicione o filegroup à base de dados.

-- Assumindo uma base de dados de exemplo:
CREATE DATABASE DemoFilestream
ON PRIMARY (
    NAME = DemoFilestream_Data,
    FILENAME = 'C:\SQLData\DemoFilestream.mdf'
), FILEGROUP FGFilestream CONTAINS FILESTREAM(
    NAME = DemoFilestream_FS,
    FILENAME = 'C:\SQLData\DemoFilestream_FS'
)
LOG ON (
    NAME = DemoFilestream_Log,
    FILENAME = 'C:\SQLData\DemoFilestream.ldf'
);

Se a pasta já existir, apenas assegure permissões NTFS para a conta do serviço do SQL Server.

Passo 3: Criar tabela com coluna Filestream

Crie uma tabela que inclua uma coluna VARBINARY(MAX) com a propriedade FILESTREAM e uma coluna ROWGUIDCOL que será usada para identificar cada registo (obrigatório).

USE DemoFilestream;
GO
CREATE TABLE Documents (
    DocumentId UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWSEQUENTIALID(),
    FileName NVARCHAR(260) NOT NULL,
    FileContent VARBINARY(MAX) FILESTREAM NULL,
    UploadedAt DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME()
);

Passo 4: Inserir e ler ficheiros (exemplo com T-SQL)

Pode inserir dados usando OPENROWSET(BULK...) para carregar ficheiros do disco para a coluna FILESTREAM. Para leitura, pode exportar ou ler directamente com SELECT.

-- Inserir um ficheiro no Filestream (exemplo: C:\Upload\report.pdf)
INSERT INTO Documents (FileName, FileContent)
SELECT 'report.pdf', BulkColumn
FROM OPENROWSET(BULK 'C:\Upload\report.pdf', SINGLE_BLOB) AS x;

-- Ler meta-dados e tamanho do blob
SELECT DocumentId, FileName, DATALENGTH(FileContent) AS SizeBytes, UploadedAt
FROM Documents;

-- Exportar ficheiro usando T-SQL e comando adicional: usar fn_varbintohexstr ou ferramentas externas.

Nota: para exportar para ficheiro no servidor pode usar uma aplicação cliente ou um script PowerShell que leia a coluna e grave no disco. Também pode usar as Filestream APIs com código em C# para acesso Win32 eficiente.

Passo 5: Boas práticas e erros comuns

Use estas recomendações para evitar problemas comuns com Filestream: backups, manutenção e permissões são críticos.

  • Inclua o filegroup Filestream nos backups FULL e RESTORE; sem isso perde os dados Filestream.
  • Verifique permissões NTFS para a conta do serviço do SQL Server na pasta Filestream.
  • Evite armazenar ficheiros pequenos (< 1 MB) em Filestream — para ficheiros pequenos um VARBINARY normal pode ser mais simples.
  • Se vir erros como "The backup's filegroup does not contain the FILESTREAM data" verifique que fez backup do filegroup correcto.

Verificar o resultado

Para confirmar que Filestream funciona, execute um SELECT e verifique o tamanho dos BLOBs e a existência dos ficheiros na pasta do filegroup (os ficheiros não aparecem com nomes amigáveis). Faça um BACKUP DATABASE e depois um RESTORE em ambiente de teste para garantir que o filegroup foi incluído. Exemplo de verificação rápida:

-- Verificar registos e tamanho
SELECT DocumentId, FileName, DATALENGTH(FileContent) AS SizeBytes
FROM Documents;

-- Fazer backup (incluir filegroups automaticamente se for FULL)
BACKUP DATABASE DemoFilestream TO DISK = 'C:\Backups\DemoFilestream.bak';

Conclusão

Filestream em SQL Server permite armazenar ficheiros grandes de forma eficiente, mantendo integridade transaccional e melhorando o desempenho. Próximos passos: experimentar acesso via aplicação (C# ou PowerShell) para ler/gravar ficheiros directamente, e testar cenários de backup/restore. Dica: antes de produção, teste permissões NTFS e rotinas de backup para evitar perda de dados.