SQL Server 2025 - REST APIs, Vetores e Inteligência Artificial

O SQL Server 2025 representa um avanço significativo na convergência entre bancos de dados relacionais, integração com serviços externos e inteligência artificial. Com recursos nativos para consumir REST APIs, gerar embeddings e conversar com modelos de linguagem, o banco deixa de ser apenas um repositório e passa a atuar como uma plataforma ativa de integração e análise semântica.

Neste artigo, você acompanha um cenário completo, baseado na demonstração em vídeo citada nas fontes. Primeiro, o banco coleta dados públicos do YouTube; em seguida, gera embeddings e, por fim, responde perguntas em linguagem natural com busca vetorial.

O que muda no SQL Server 2025

O SQL Server 2025, versão 17.x do produto, chegou à disponibilidade geral em 18 de novembro de 2025. Entre as novidades, a Microsoft destaca um conjunto de recursos de inteligência artificial integrados ao próprio engine.

Na prática, três blocos se combinam no cenário deste artigo. O primeiro é a chamada de endpoints HTTPS com a procedure sp_invoke_external_rest_endpoint.

O segundo bloco é o registro de modelos de IA com CREATE EXTERNAL MODEL e a geração de embeddings com AI_GENERATE_EMBEDDINGS. Já o terceiro é o tipo de dado VECTOR, acompanhado das funções de distância e dos índices vetoriais.

Com isso, tarefas que antes exigiam uma aplicação intermediária, um pipeline de ETL e um banco vetorial separado passam a caber em scripts T-SQL. Por outro lado, essa concentração exige atenção redobrada a segurança, permissões e desempenho.

Consumo nativo de REST APIs no SQL Server 2025

Uma das principais inovações do SQL Server 2025 é a capacidade de consumir REST APIs diretamente a partir do engine. Esse recurso elimina camadas intermediárias, como aplicações ou serviços de integração, e reduz a latência e a complexidade da arquitetura.

Segundo a documentação oficial da sp_invoke_external_rest_endpoint, a procedure aceita os métodos GET, POST, PUT, PATCH, DELETE e HEAD. Além disso, ela permite definir cabeçalhos, payload, timeout e número de novas tentativas.

Habilitando o recurso

No SQL Server 2025, a procedure vem desabilitada por padrão. Para habilitar esse cenário, você precisa de três passos.

Primeiro, crie uma master key no banco de dados para guardar credenciais com segurança. Em seguida, habilite os REST endpoints via sp_configure e, por fim, registre as credenciais das APIs externas.

-- Habilita a chamada de endpoints REST na instância
EXECUTE sp_configure 'external rest endpoint enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO

-- Cria a master key que protege as credenciais do banco
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys
               WHERE [name] = '##MS_DatabaseMasterKey##')
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'<strong-password>';
GO

Para executar o sp_configure, o usuário precisa da permissão ALTER SETTINGS. Já quem chama a procedure precisa da permissão EXECUTE ANY EXTERNAL ENDPOINT no banco.

Credenciais e chamadas autenticadas

As credenciais ficam em um DATABASE SCOPED CREDENTIAL, cujo nome é a URL base da API. O parâmetro IDENTITY define como o segredo viaja: nos cabeçalhos, na query string, por identidade gerenciada ou por SAS.

-- A chave da API vai na query string de cada chamada
CREATE DATABASE SCOPED CREDENTIAL [https://www.googleapis.com/youtube/v3]
WITH IDENTITY = 'HTTPEndpointQueryString',
     SECRET = '{"key":"<YOUR_API_KEY>"}';
GO

Com essa configuração mínima, o SQL Server passa a fazer chamadas HTTP autenticadas e a processar respostas em JSON. Assim, recursos nativos como o OPENJSON transformam esses dados em estruturas relacionais.

Vale destacar que a procedure só aceita endpoints HTTPS com TLS e não segue redirecionamentos automaticamente. Além disso, a resposta chega em um JSON com duas partes: response, com status e cabeçalhos, e result, com o corpo devolvido pela API.

Boas práticas nas chamadas REST do SQL Server 2025

O parâmetro @timeout define, em segundos, quanto tempo a chamada pode levar. O padrão é de 30 segundos, e o valor aceito vai de 1 a 230.

Já o @retry_count aceita de 0 a 10 novas tentativas em erros como 429, 500 e 503. Quando a API devolve o cabeçalho Retry-After, a procedure respeita esse intervalo antes de tentar de novo.

Além disso, a documentação recomenda agrupar várias linhas em um único documento JSON com FOR JSON antes de enviar dados. Dessa forma, você evita o custo de uma chamada HTTPS por linha.

Por fim, lembre que o retorno da procedure é 0 quando o status HTTP fica na faixa 2xx. Em outros casos, ela devolve o próprio código HTTP, então vale checar esse valor antes de processar a resposta.

Ingestão de dados externos com o SQL Server 2025

No cenário demonstrado, o banco consome dados públicos do YouTube por meio da API oficial da plataforma. As informações coletadas incluem playlists, vídeos, metadados de publicação, títulos e descrições.

O fluxo de ingestão segue os seguintes passos:

  1. Criar tabelas relacionais para armazenar playlists e vídeos.
  2. Consumir a API de playlists para obter os identificadores dos vídeos.
  3. Consumir a API de detalhes dos vídeos para enriquecer os registros com título, descrição e data de publicação.
  4. Processar os dados de forma incremental, em lotes, respeitando os limites da API.

Criando as tabelas

O modelo relacional é simples: uma tabela de playlists e outra de vídeos. Além disso, a tabela de vídeos já reserva uma coluna do tipo VECTOR para os embeddings.

CREATE TABLE dbo.Playlists
(
    PlaylistId NVARCHAR(64) NOT NULL PRIMARY KEY,
    Title      NVARCHAR(200) NULL
);

CREATE TABLE dbo.Videos
(
    Id          INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
    VideoId     NVARCHAR(20) NOT NULL UNIQUE,
    PlaylistId  NVARCHAR(64) NOT NULL REFERENCES dbo.Playlists (PlaylistId),
    Title       NVARCHAR(200) NULL,
    Description NVARCHAR(MAX) NULL,
    PublishedAt DATETIME2 NULL,
    -- A dimensão precisa bater com o modelo de embeddings escolhido
    Embedding   VECTOR(768) NULL
);

Lendo a API de playlists

Em seguida, o script chama o endpoint playlistItems com o método GET e guarda a resposta em uma variável. Depois disso, o OPENJSON extrai os identificadores dos vídeos.

DECLARE @response NVARCHAR(MAX);
DECLARE @playlistId NVARCHAR(64) = N'<PLAYLIST_ID>';
DECLARE @url NVARCHAR(4000) =
    N'https://www.googleapis.com/youtube/v3/playlistItems'
    + N'?part=contentDetails&maxResults=50&playlistId=' + @playlistId;

EXECUTE sp_invoke_external_rest_endpoint
    @url = @url,
    @method = 'GET',
    @credential = [https://www.googleapis.com/youtube/v3],
    @response = @response OUTPUT;

-- Insere apenas os vídeos que ainda não existem na tabela
INSERT INTO dbo.Videos (VideoId, PlaylistId)
SELECT items.VideoId, @playlistId
FROM OPENJSON(@response, '$.result.items')
     WITH (VideoId NVARCHAR(20) '$.contentDetails.videoId') AS items
WHERE NOT EXISTS (SELECT 1 FROM dbo.Videos AS v WHERE v.VideoId = items.VideoId);

A API devolve no máximo 50 itens por página. Por isso, playlists maiores exigem um laço que repete a chamada com o nextPageToken devolvido em cada resposta.

Enriquecendo os vídeos em lotes

Com os identificadores em mãos, o próximo passo chama o endpoint videos para buscar título, descrição e data de publicação. Nesse caso, o script envia até 50 identificadores por chamada, separados por vírgula.

DECLARE @ids NVARCHAR(MAX), @response NVARCHAR(MAX), @url NVARCHAR(4000);

-- Seleciona um lote de vídeos ainda sem título
SELECT @ids = STRING_AGG(VideoId, ',')
FROM (SELECT TOP (50) VideoId FROM dbo.Videos WHERE Title IS NULL) AS batch;

SET @url = N'https://www.googleapis.com/youtube/v3/videos?part=snippet&id=' + @ids;

EXECUTE sp_invoke_external_rest_endpoint
    @url = @url,
    @method = 'GET',
    @credential = [https://www.googleapis.com/youtube/v3],
    @response = @response OUTPUT;

UPDATE v
SET v.Title       = d.Title,
    v.Description = d.Description,
    v.PublishedAt = d.PublishedAt
FROM dbo.Videos AS v
JOIN OPENJSON(@response, '$.result.items')
     WITH (VideoId     NVARCHAR(20)  '$.id',
           Title       NVARCHAR(200) '$.snippet.title',
           Description NVARCHAR(MAX) '$.snippet.description',
           PublishedAt DATETIME2     '$.snippet.publishedAt') AS d
  ON d.VideoId = v.VideoId;

Esse processamento incremental respeita a cota da API, que tem um limite diário padrão de 10 mil unidades. De acordo com a calculadora de cota do Google, cada chamada de listagem desses endpoints custa uma unidade.

O resultado é um repositório relacional totalmente populado a partir de uma fonte externa. Ou seja, o SQL Server 2025 fez o papel que antes cabia a ferramentas de ETL tradicionais.

Integração com modelos de linguagem e inferência local

O SQL Server 2025 também se integra diretamente a modelos de linguagem de grande porte (LLMs) por meio de endpoints REST. Um ponto relevante do cenário apresentado é a inferência totalmente local, com um servidor com GPU e um runtime como o Ollama.

Essa abordagem garante:

  • Total controle sobre os dados processados.
  • Conformidade com requisitos de segurança e privacidade.
  • Eliminação da dependência de serviços externos de IA.

A partir dessa integração, o banco envia textos armazenados a um modelo de linguagem para tarefas como sumarização, tradução ou classificação, diretamente a partir de T-SQL. O exemplo abaixo pede um resumo ao endpoint /api/generate do Ollama.

DECLARE @response NVARCHAR(MAX);
DECLARE @description NVARCHAR(MAX) =
    (SELECT TOP (1) Description FROM dbo.Videos WHERE Description IS NOT NULL);

DECLARE @payload NVARCHAR(MAX) = JSON_OBJECT(
    'model': 'llama3.2',
    'prompt': 'Summarize the following video description in one sentence: ' + @description,
    'stream': CAST(0 AS BIT));

EXECUTE sp_invoke_external_rest_endpoint
    @url = N'https://localhost:11435/api/generate',
    @method = 'POST',
    @payload = @payload,
    @timeout = 120,
    @response = @response OUTPUT;

-- O texto gerado fica no campo response do corpo devolvido
SELECT JSON_VALUE(@response, '$.result.response') AS Summary;

Como a procedure só aceita HTTPS, o Ollama local precisa ficar atrás de um proxy com TLS. Por isso, a documentação da Microsoft usa uma porta HTTPS em localhost nos exemplos com Ollama.

Embeddings vetoriais no SQL Server 2025

Além da inferência textual, o SQL Server 2025 oferece suporte nativo à geração de embeddings por meio da função AI_GENERATE_EMBEDDINGS. Embeddings são representações numéricas de conteúdo textual que permitem análises semânticas avançadas.

Em outras palavras, textos com significado parecido geram vetores próximos, mesmo quando usam palavras diferentes. Se quiser se aprofundar no conceito, o artigo sobre dados vetoriais no .NET explica a mesma ideia do lado da aplicação.

Registrando o modelo externo

Antes de gerar embeddings, você registra o modelo como um objeto do banco com CREATE EXTERNAL MODEL. Os formatos de API aceitos são Azure OpenAI, OpenAI, Ollama e ONNX Runtime.

CREATE EXTERNAL MODEL OllamaEmbeddings
WITH (
    LOCATION   = 'https://localhost:11435/api/embed',
    API_FORMAT = 'Ollama',
    MODEL_TYPE = EMBEDDINGS,
    MODEL      = 'nomic-embed-text'
);

Com o modelo registrado, qualquer consulta com permissão de uso passa a gerar embeddings pelo nome OllamaEmbeddings. Dessa forma, trocar de provedor exige apenas alterar o modelo externo, e não cada consulta.

O argumento opcional PARAMETERS aceita um JSON com parâmetros extras, como dimensions, que seguem no corpo de cada requisição ao endpoint. Além disso, a própria AI_GENERATE_EMBEDDINGS permite sobrescrever esses valores em tempo de execução.

Vale lembrar também que a dimensão da coluna VECTOR precisa ser igual à quantidade de números que o modelo devolve. Por isso, confira a documentação do modelo antes de criar a tabela.

Gerando e armazenando os vetores

No exemplo apresentado, o banco gera embeddings a partir do título e da descrição dos vídeos. Como resultado, cada linha recebe um vetor com centenas de dimensões, guardado diretamente em uma coluna da tabela.

-- Gera os embeddings apenas para vídeos ainda não processados
UPDATE dbo.Videos
SET Embedding = AI_GENERATE_EMBEDDINGS(
        CONCAT(Title, N'. ', Description) USE MODEL OllamaEmbeddings)
WHERE Embedding IS NULL
  AND Title IS NOT NULL;

Esse processo transforma conteúdo textual em dados matemáticos e viabiliza buscas baseadas em significado, e não apenas em correspondência literal de termos. Para textos longos, a função AI_GENERATE_CHUNKS divide o conteúdo em pedaços antes da geração dos vetores.

Busca semântica com vetores no SQL Server 2025

Uma vez armazenados os embeddings, o SQL Server 2025 permite buscas semânticas com funções de distância vetorial, como a distância de cosseno.

O fluxo de busca consiste em:

  1. Converter a consulta do usuário em um embedding.
  2. Calcular a distância entre esse embedding e os embeddings armazenados.
  3. Ordenar os resultados pelo menor valor de distância.
DECLARE @question VECTOR(768) = AI_GENERATE_EMBEDDINGS(
    N'how to protect an API from abuse' USE MODEL OllamaEmbeddings);

SELECT TOP (5)
       VideoId,
       Title,
       VECTOR_DISTANCE('cosine', @question, Embedding) AS Distance
FROM dbo.Videos
WHERE Embedding IS NOT NULL
ORDER BY Distance;

Esse mecanismo responde perguntas em linguagem natural e encontra conteúdos relacionados mesmo sem coincidência exata de palavras. Assim, a busca fica muito mais inteligente sem sair do banco de dados.

Esse mesmo padrão é a base de uma arquitetura RAG, em que os trechos mais próximos alimentam o prompt de um modelo de linguagem. Para entender o conceito completo, leia o artigo sobre o que é RAG.

Considerações de desempenho

A função VECTOR_DISTANCE sempre faz uma busca exata, comparando a pergunta com todos os vetores candidatos. Segundo a documentação, essa abordagem funciona bem até cerca de 50 mil vetores por consulta.

Embora o exemplo apresentado use um volume moderado de dados, o SQL Server 2025 suporta índices vetoriais para cenários de maior escala. Nesse caso, o CREATE VECTOR INDEX usa o algoritmo DiskANN para buscas aproximadas, consultadas com a função VECTOR_SEARCH.

-- Índices vetoriais ainda exigem os recursos em preview no SQL Server 2025
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;
GO

CREATE VECTOR INDEX IX_Videos_Embedding
ON dbo.Videos (Embedding)
WITH (METRIC = 'cosine', TYPE = 'DiskANN');

No entanto, índices vetoriais e VECTOR_SEARCH continuam em preview no SQL Server 2025, enquanto o tipo VECTOR e as funções de distância já estão em disponibilidade geral. Portanto, confira as limitações atuais na documentação antes de levar o índice para produção.

Além disso, o uso de GPU para gerar embeddings e executar inferência reduz significativamente o tempo de processamento. Com isso, cenários de produção se tornam viáveis mesmo em ambientes on-premises.

Quando usar os recursos de IA do SQL Server 2025

Os recursos de IA do banco brilham quando o enriquecimento precisa acontecer perto dos dados. Por exemplo, gerar embeddings logo após a carga evita mover milhares de registros para uma aplicação externa só para devolvê-los em seguida.

Também fazem sentido em rotinas agendadas de ingestão, como a coleta incremental de vídeos deste artigo. Nesse caso, o banco concentra coleta, transformação e indexação em um único lugar.

Por outro lado, chamadas REST consomem conexões e tempo do servidor. Em instâncias muito disputadas, uma camada de aplicação ou uma fila ainda pode ser a escolha mais segura para integrações de alto volume.

Do lado da aplicação .NET, o artigo sobre ingestão de dados para aplicações .NET com RAG mostra a alternativa em que o código faz esse trabalho fora do banco.

Segurança ao chamar serviços externos

A própria Microsoft alerta que a sp_invoke_external_rest_endpoint permite transferir dados para entidades externas. Por isso, aplique o princípio do menor privilégio e restrinja quem pode executar a procedure.

Também vale monitorar e auditar as chamadas REST feitas pelo banco. Afinal, um script mal configurado pode enviar dados sensíveis para um endpoint indevido.

No caso de modelos locais, a responsabilidade pela escolha e pela segurança do modelo fica com você. Dessa forma, use apenas modelos de fontes confiáveis e verificadas.

Se quiser montar um ambiente de testes rapidamente, o guia de SQL Server no Docker mostra como subir uma instância local em contêiner.

Conclusão

O SQL Server 2025 redefine o papel do banco de dados ao integrar, de forma nativa, consumo de REST APIs, inteligência artificial e vetores.

A possibilidade de coletar dados externos, enriquecê-los com modelos de linguagem e realizar buscas semânticas diretamente em T-SQL representa um salto arquitetural significativo. Ao mesmo tempo, esse poder pede cuidado com permissões, custos de chamadas e recursos ainda em preview.

Esses recursos abrem caminho para aplicações mais inteligentes, seguras e eficientes, com menos dependências externas. Assim, o SQL Server 2025 se consolida como uma plataforma completa para dados e IA.

FAQ

O SQL Server 2025 consegue chamar qualquer API REST?

Sim, desde que o endpoint use HTTPS com TLS. A lista de domínios permitidos vale apenas para o Azure SQL Database e o Azure SQL Managed Instance.

Preciso de um serviço de nuvem para gerar embeddings?

Não. O CREATE EXTERNAL MODEL aceita Ollama e ONNX Runtime, o que permite gerar embeddings com modelos locais.

A VECTOR_DISTANCE calcula a distância exata e não usa índices. A VECTOR_SEARCH faz busca aproximada com um índice vetorial DiskANN.

Os índices vetoriais já estão prontos para produção?

No SQL Server 2025, os índices vetoriais e a VECTOR_SEARCH ainda estão em preview e exigem a configuração PREVIEW_FEATURES. O tipo VECTOR e as funções de distância já estão disponíveis de forma geral.

A chamada REST fica habilitada por padrão?

Não no SQL Server 2025, onde você habilita a opção external rest endpoint enabled com sp_configure. No Azure SQL Database, o recurso já vem habilitado.