Partilhar via


CRIAR ÍNDICE VETORIAL (Transact-SQL) (Pré-visualização)

Aplica-se a: SQL Server 2025 (17.x) Azure SQL Database SQLdatabase in Microsoft Fabric

Crie um índice aproximado em uma coluna vetorial para melhorar o desempenho da pesquisa de vizinhos mais próximos. Para saber mais sobre como a indexação vetorial e a pesquisa vetorial funcionam, e as diferenças entre a pesquisa exata e aproximada, consulte Pesquisa vetorial e índices vetoriais no Mecanismo de Banco de dados SQL.

Banco de Dados SQL do Azure e Banco de Dados SQL no Fabric

A funcionalidade está em pré-visualização. Verifique as limitações e considerações antes de avançar.

Observação

Como funcionalidade de pré-visualização, a tecnologia apresentada neste artigo está sujeita aos Termos de Utilização Suplementares para Pré-visualizações do Microsoft Azure.

Advertência

Aviso de descontinuação: Índices vetoriais criados com uma estrutura de dados anterior são suportados na versão atual, mas serão retirados numa versão futura. Para garantir compatibilidade futura e acesso às mais recentes capacidades de pesquisa vetorial, migre os índices vetoriais existentes usando os passos da secção Migração de versões anteriores de índice vetorial .

Disponibilidade regional

Esta funcionalidade está a ser implementada em Azure SQL Database e SQL Database no Microsoft Fabric. Durante o lançamento, a disponibilidade e o comportamento podem variar consoante a região e a versão do índice. Se uma funcionalidade ou sintaxe não estiver disponível, torna-se automaticamente disponível à medida que a implementação termina. Para o estado atual da disponibilidade regional, consulte Disponibilidade de funcionalidades por região.

Funcionalidade de Pré-visualização do SQL Server 2025

No SQL Server 2025, esta função está em pré-visualização e está sujeita a alterações. Para usar esse recurso, você deve habilitar a PREVIEW_FEATURES banco de dados.

Certifique-se de verificar as limitações atuais antes de usá-lo.

Observação

A versão mais recente dos Vector Indexes está atualmente disponível apenas no Azure SQL Database e na base de dados SQL no Microsoft Fabric.

Sintaxe

Transact-SQL convenções de sintaxe

CREATE VECTOR INDEX index_name
ON object ( vector_column )
[ WITH (
    [ , ] METRIC = { 'cosine' | 'dot' | 'euclidean' }
    [ [ , ] TYPE = 'DiskANN' ]
    [ [ , ] MAXDOP = max_degree_of_parallelism ]
) ]
[ ON { filegroup_name | "default" } ]
[;]

Argumentos

index_name

O nome do índice. Os nomes de índice devem ser exclusivos dentro de uma tabela, mas não precisam ser exclusivos dentro de um banco de dados. Os nomes dos índices devem seguir as regras dos identificadores.

objeto

Tabela na qual o índice é criado. Deve ser uma tabela de base. Não há suporte para visualizações, tabelas temporárias, locais e globais.

vector_column

Coluna a ser usada para criar o índice vetorial. Deve ser do tipo vetorial .

MÉTRICA

Uma cadeia de caracteres com o nome da métrica de distância a ser usada para calcular a distância entre os dois vetores fornecidos. As seguintes métricas de distância são suportadas:

  • cosine - Distância cossena
  • euclidean - Distância euclidiana
  • dot - Produto Dot (Negativo)

TYPE

O tipo de algoritmo ANN usado para construir o índice. Atualmente, apenas DiskANN é suportado. DiskANN é o valor padrão.

MAXDOP

Substitui o grau máximo de paralelismo opção de configuração para a operação de índice. Para obter mais informações, consulte Configuração do servidor : grau máximo de paralelismo. Use MAXDOP para limitar o grau de paralelismo e o consumo de recursos resultante para uma operação de compilação de índice.

max_degree_of_parallelism pode ser:

  • 1

    Suprime a geração de planos paralelos.

  • >1

    Restringe o grau máximo de paralelismo usado em uma operação de índice paralelo ao número especificado ou menos com base na carga de trabalho atual do sistema.

  • 0 (padrão)

    Usa o grau de paralelismo especificado no nível do servidor, banco de dados ou grupo de carga de trabalho, a menos que seja reduzido com base na carga de trabalho atual do sistema.

Para obter mais informações, consulte Configurar operações de índice paralelo.

Observação

As operações de índice paralelo não estão disponíveis em todas as edições do SQL Server. Para uma lista de funcionalidades suportadas pelas edições do SQL Server, consulte Edições e funcionalidades suportadas do SQL Server 2022 ou Edições e funcionalidades suportadas pelo SQL Server 2025.

Atualizar os índices vetoriais para a versão mais recente

Importante

Aviso de descontinuação: Índices vetoriais criados com uma estrutura de dados anterior são suportados na versão atual, mas serão retirados numa versão futura. Para garantir compatibilidade futura e acesso às mais recentes capacidades de pesquisa vetorial, migre os índices vetoriais existentes usando os passos abaixo.

Os índices vetoriais recém-criados utilizam automaticamente a estrutura de dados mais recente, que fornece:

  • Suporte total para DML: Remove a limitação anterior que tornava as tabelas indexadas vetorialmente apenas leitura após a criação do índice. Agora pode realizar operações de INSERIR, ATUALIZAR, ELIMINAR e MERGE, mantendo a funcionalidade de índice vetorial com manutenção automática e em tempo real do índice
  • Filtragem iterativa: Os predicados na cláusula WHERE são aplicados durante o processo de pesquisa vetorial, não após a recuperação
  • Orientado pelo otimizador: O otimizador de consultas determina automaticamente se deve usar o índice DiskANN ou a pesquisa kNN com base nas características da consulta
  • Quantização avançada: Técnicas de quantização vetorial foram integradas para proporcionar melhor eficiência de armazenamento e desempenho de consulta mais rápido, sendo estas otimizações transparentes para os utilizadores

Para detalhes sobre limitações anteriores de versões de índices vetoriais, consulte a secção Limitações e considerações.

Migração de versões anteriores de índice vetorial

Índices vetoriais criados com uma versão anterior devem ser eliminados e recriados para permitir as capacidades mais recentes. Esta secção explica como identificar, migrar e verificar versões do índice vetorial.

Passo 1: Identificar índices vetoriais existentes

Use a seguinte consulta para identificar índices vetoriais que requerem migração:

SELECT
    i.name AS index_name,
    t.name AS table_name,
    JSON_VALUE(v.build_parameters, '$.Version') AS index_version,
    CASE
        WHEN JSON_VALUE(v.build_parameters, '$.Version') >= '3'
            THEN 'Uses latest version (no migration required)'
        WHEN JSON_VALUE(v.build_parameters, '$.Version') < '3'
            THEN 'Created using an earlier version (migration recommended)'
        ELSE 'Unknown format'
    END AS migration_status
FROM sys.vector_indexes AS v
    INNER JOIN sys.indexes AS i
        ON v.object_id = i.object_id
        AND v.index_id = i.index_id
    INNER JOIN sys.tables AS t
        ON v.object_id = t.object_id
ORDER BY t.name, i.name;
Como interpretar os resultados

Utiliza a versão mais recente

  • Já suporta filtragem iterativa, suporte completo a DML, execução orientada por otimizadores e quantização melhorada
  • Não é necessária migração

Criado usando uma versão anterior

  • Utiliza comportamento pós-filtro legado
  • Não suporta as mais recentes capacidades de pesquisa vetorial
  • A migração é fortemente recomendada para garantir compatibilidade futura

Passo 2: Retirar e recriar o índice vetorial

Índices vetoriais criados com um formato anterior não podem ser atualizados no local. Para ativar as capacidades mais recentes do DiskANN, desfaça e recrie o índice.

Advertência

Impacto do serviço: Eliminar um índice vetorial desativa imediatamente a pesquisa vetorial aproximada na tabela afetada até que o índice seja recriado. Planeia migrações durante as janelas de manutenção para sistemas de produção.

Eliminar o índice existente
DROP INDEX vec_idx ON dbo.wikipedia_articles;
Recriar o índice
CREATE VECTOR INDEX vec_idx
    ON dbo.wikipedia_articles (title_vector)
    WITH (
        TYPE = 'DISKANN',
        METRIC = 'COSINE'
    );

Observação

Índices vetoriais criados com a instrução atual CREATE VECTOR INDEX usam automaticamente o formato DiskANN mais recente. Não são necessárias opções ou bandeiras adicionais.

Passo 3: Verificar a versão indexada

Após a recreação, verifique se o índice está a usar a versão mais recente:

SELECT
    i.name AS index_name,
    t.name AS table_name,
    JSON_VALUE(v.build_parameters, '$.Version') AS index_version
FROM sys.vector_indexes AS v
    INNER JOIN sys.indexes AS i
        ON v.object_id = i.object_id
        AND v.index_id = i.index_id
    INNER JOIN sys.tables AS t
        ON v.object_id = t.object_id
WHERE i.name = 'vec_idx';

A index_version coluna deve mostrar 3 a versão mais recente.

Comportamento de erro com incompatibilidade de versões

Se tentar usar o TOP_N parâmetro em VECTOR_SEARCH com um índice vetorial da versão mais recente, o SQL Server devolve o seguinte erro:

Msg 42274, Level 16, State 1
Vector search with version 3 index does not support explicit TOP_N parameter.

Para resolver este erro, remova o TOP_N parâmetro de VECTOR_SEARCH e use a SELECT TOP (N) WITH APPROXIMATE sintaxe em vez disso. Para informações detalhadas, veja Erro usando sintaxe legada.

Limitações e considerações

Limitações anteriores das versões do índice vetorial

Versões anteriores de índice vetorial apresentam as seguintes limitações adicionais. Para verificar a sua versão indexada, consulte Verificar a versão indexada.

  • Apenas após filtragem: Os predicados são aplicados apenas após a recuperação vetorial, não durante o processo de pesquisa. Isto pode resultar em menos linhas do que o esperado quando os filtros são aplicados.

  • Tabelas somente de leitura: Tabelas com índices vetoriais são apenas de leitura. Não são permitidas operações DML (INSERIR, ATUALIZAR, ELIMINAR, MERGE) após a criação do índice vetorial. Use a ALLOW_STALE_VECTOR_INDEX configuração com escopo da base de dados para permitir operações DML se conseguir tolerar resultados de pesquisa obsoletos.

  • Ajuste manual TOP_N: Deve ajustar manualmente o TOP_N parâmetro para VECTOR_SEARCH compensar o pós-filtragem, muitas vezes exigindo valores sobredimensionados para obter o número desejado de resultados.

Limitações atuais (aplica-se também à versão mais recente)

A visualização atual tem as seguintes limitações:

  • Índices vetoriais não podem ser particionados. Sem suporte a partições.

  • A tabela deve ter um índice agrupado por chaves primárias.

  • Os índices vetoriais não são replicados para assinantes.

  • Tabelas com índices vetoriais não podem ser truncadas usando TRUNCATE TABLE. Para remover todos os dados, retire primeiro o índice vetorial, trunque a tabela, repreenche com pelo menos 100 linhas e depois recrie o índice. Para mais informações, consulte restrições da TABELA TRUNCADA.

  • Índices vetoriais não podem ser implementados com DacPac ou BACPAC. Índices vetoriais requerem pelo menos 100 linhas com vetores não NULL no momento da criação. Quando se importa uma base de dados usando DacPac, BACPAC ou o serviço Import/Export, o processo de importação cria objetos de esquema (incluindo índices vetoriais) antes de carregar os dados, o que faz com que a importação falhe.

    Solução alternativa: Elimina os índices vetoriais antes de exportar a base de dados e recria os índices após a importação.

Requisitos mínimos de dados

Índices vetoriais requerem um número mínimo de linhas com valores vetoriais não NULL antes de o índice poder ser criado.

  • Contagem mínima de linhas: Devem existir pelo menos 100 linhas com valores vetoriais não NULL na tabela.
  • Comportamento de erro: Tentar criar um índice vetorial numa tabela com menos de 100 linhas falha com o erro Msg 42266.

Exemplo de erro:

Msg 42266, Level 16, State 1
Cannot create a vector index. The table contains only 8 rows with non-null vectors, 
but at least 100 are required for vector index creation.

Boa prática: Preenche a tabela com pelo menos 100 linhas antes de criar o índice vetorial. Para cenários de desenvolvimento e testes onde são necessárias menos linhas, VECTOR_SEARCH funciona sem um índice usando uma abordagem de varrimento por força bruta, embora o desempenho se degrade com conjuntos de dados maiores.

Suporte DML

Uma vez criado um índice vetorial DiskANN usando a versão mais recente, a tabela deixa de ser apenas de leitura. Pode modificar livremente os dados usando operações de linguagem padrão de manipulação de dados (DML), e as alterações são automaticamente refletidas nos resultados da pesquisa vetorial.

Esta capacidade torna a pesquisa vetorial adequada para cargas de trabalho transacionais em tempo real, onde os dados mudam ao longo do tempo.

Notas de comportamento

  • As operações DML não exigem eliminar ou reconstruir o índice vetorial.
  • As alterações são visíveis nas consultas de pesquisa vetorial após o commit da transação.
  • Para substituição de dados em grande escala (por exemplo, eliminar a maioria das linhas e inserir um conjunto totalmente novo de embeddings), considere eliminar e recriar o índice vetorial após a carga dos dados para garantir uma qualidade de pesquisa ótima.

Observação

O suporte para DML está disponível apenas com índices vetoriais criados com a versão mais recente. Versões anteriores exigem que as tabelas sejam apenas de leitura ou utilizem a ALLOW_STALE_VECTOR_INDEX configuração com âmbito de base de dados.

Monitorização da manutenção do índice vetorial

Os índices vetoriais realizam manutenção em segundo plano para incorporar as alterações do DML. Use a vista dinâmica de gestão sys.dm_db_vector_indexes para monitorizar o estado de saúde do índice e o estado da tarefa de manutenção.

Combinação de índices vetoriais com índices tradicionais

Os índices vetoriais funcionam em conjunto com os índices tradicionais da árvore B para proporcionar um desempenho ótimo de consulta. Ao usar filtragem iterativa com VECTOR_SEARCH, considere criar índices tradicionais em colunas usadas em predicados de filtro.

Para informações detalhadas sobre o comportamento de filtragem iterativa e como difere das versões anteriores, veja Comportamento de filtragem iterativa.

Sugestão

O otimizador de consultas seleciona automaticamente a melhor estratégia de execução (índice aproximado do vizinho mais próximo vs. pesquisa kNN). Para forçar o uso do índice aproximado do vizinho mais próximo, use a FORCE_ANN_ONLY dica da tabela. Para mais informações, consulte dicas da tabela para pesquisa vetorial.

Exemplo de cenário:

-- Create vector index for similarity search
CREATE VECTOR INDEX idx_embeddings_vector
ON product_embeddings(embedding)
WITH (METRIC = 'cosine');

-- Create traditional index for filter columns
CREATE NONCLUSTERED INDEX idx_embeddings_filters
ON product_embeddings(category);

Benefício de desempenho:

Ao executar consultas com filtragem iterativa, o otimizador de consultas do SQL Server utiliza ambos os tipos de índice:

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'wireless headphones' USE MODEL EmbeddingModel);

SELECT TOP (10) WITH APPROXIMATE
    p.name,
    p.price,
    vs.distance
FROM products p
INNER JOIN VECTOR_SEARCH(
    TABLE = product_embeddings AS e,
    COLUMN = embedding,
    SIMILAR_TO = @qv,
    METRIC = 'cosine'
) AS vs ON p.id = e.product_id
WHERE e.approved = 1             
  AND e.category = 'Electronics'  -- Can use traditional index
ORDER BY vs.distance;

Nesta consulta:

  • O índice vetorial identifica embeddings semelhantes com base no vetor de consulta
  • O índice tradicional filtra (category) os candidatos de forma eficiente durante o processo de pesquisa iterativa

Esta estratégia composta pode melhorar significativamente o desempenho da consulta em comparação com a utilização apenas de um índice vetorial, especialmente quando os predicados de filtro têm alta seletividade.

Orientações de qualidade e manutenção de dados para índices vetoriais

Evite conjuntos de dados com elevadas incorporações duplicadas

A indexação vetorial funciona melhor quando os embeddings representam conteúdo semântico diversificado. Conjuntos de dados com uma elevada proporção de vetores duplicados não são recomendados para indexação vetorial.

Uma elevada duplicação pode levar a:

  • Má qualidade dos resultados: Vetores duplicados aparecem repetidamente nos resultados, afastando correspondências semânticas mais relevantes.
  • Eficácia reduzida: Embeddings duplicados deslocam vizinhos melhores, diminuindo a utilidade da pesquisa por similaridade.
  • Uso desnecessário de recursos: Índices vetoriais são caros de construir e manter, e duplicados acrescentam custo sem acrescentar valor.

Boa prática: Deduplicar embeddings antes de criar um índice vetorial para melhorar tanto o desempenho como a qualidade dos resultados.

Cenários de substituição de dados em grande escala

Os índices vetoriais suportam inserções, atualizações e eliminações. No entanto, quando a maioria ou todos os embeddings são substituídos — por exemplo, ao reincorporar um conjunto de dados com um novo modelo — o índice existente pode deixar de refletir a nova distribuição de dados.

Em cenários de substituição em grande escala:

  • As consultas de pesquisa vetorial continuam a devolver resultados válidos
  • Mas a qualidade do Recall e do Ranking pode degradar-se, porque a estrutura do índice foi construída para uma distribuição de embedding diferente.

Boa prática: Ao realizar a substituição quase completa dos dados (eliminar e inserir novos embeddings), retirar e recriar o índice vetorial após carregar os novos dados. Recriar o índice garante que está otimizado para a nova distribuição de embedding e restaura o comportamento previsível das consultas.

Problemas conhecidos

Para obter mais informações, consulte Problemas conhecidos.

Permissões

O usuário deve ter ALTER permissão na tabela.

Exemplos

Descarregue e importe o artigo da Wikipédia com o exemplo de embeddings vetoriais .

Os exemplos pressupõem a existência de uma tabela nomeada wikipedia_articles com uma coluna title_vector do tipo vector que armazena as incorporações de títulos de artigos da Wikipédia. title_vector é assumido como uma incorporação gerada com um modelo de incorporação como text-embedding-ada-002 ou text-embedding-3-small, que retorna vetores com 1.536 dimensões.

Para obter mais exemplos, incluindo soluções de ponta a ponta, vá para o repositório GitHub de Exemplos de Pesquisa Vetorial do Banco de Dados SQL do Azure.

Exemplo 1

O exemplo a title_vector seguir cria um índice de vetor na coluna usando a cosine métrica.

CREATE VECTOR INDEX vec_idx
    ON [dbo].[wikipedia_articles] ([title_vector])
        WITH (METRIC = 'COSINE', TYPE = 'DISKANN');

Exemplo 2

O exemplo a title_vector seguir cria um índice vetorial na coluna usando a métrica de produto (negativa), dot limitando o paralelismo a 8 e armazenando o SECONDARY vetor no grupo de arquivos.

CREATE VECTOR INDEX vec_idx
    ON [dbo].[wikipedia_articles] ([title_vector])
        WITH (METRIC = 'DOT', TYPE = 'DISKANN', MAXDOP = 8)
    ON [SECONDARY];

Exemplo 3

Um exemplo CREATE VECTOR INDEX básico de uso de ponta a ponta e a função relacionada VECTOR_SEARCH . As incorporações são ridicularizadas. Em um cenário do mundo real, as incorporações são geradas usando um modelo e AI_GENERATE_EMBEDDINGS de incorporação ou uma biblioteca externa, como o OpenAI SDK.

Observação

Os índices vetoriais de última versão requerem pelo menos 100 linhas de dados antes da criação do índice. Este exemplo insere 100 linhas para cumprir este requisito. Para mais informações, consulte Requisitos mínimos de dados.

O seguinte bloco de código demonstra CREATE VECTOR INDEX com mock embeddings:

  1. Ativa a funcionalidade de pré-visualização (necessária apenas para SQL Server 2025; não é necessária para Azure SQL Database ou SQL Database no Fabric).
  2. Crie uma tabela dbo.Articles de exemplo com uma coluna embedding com o tipo de dados vetor(5).
  3. Insira 100 linhas de dados de amostra com dados de embedding mock.
  4. Crie um índice vetorial no dbo.Articles.embedding.
  5. Demonstrar a pesquisa de semelhança vetorial com a VECTOR_SEARCH função.
-- Step 0: Enable Preview Feature (SQL Server 2025 only)
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO

-- Step 1: Create a sample table with a VECTOR(5) column
CREATE TABLE dbo.Articles
(
    id INT PRIMARY KEY,
    title NVARCHAR(100),
    content NVARCHAR(MAX),
    embedding VECTOR(5) -- mocked embeddings
);
GO

-- Step 2: Insert sample data (100 rows required for latest version indexes)
INSERT INTO Articles (id, title, content, embedding)
SELECT
    value AS id,
    'Article ' || [value],
    'Content for article ' || [value],
    CAST(JSON_ARRAY(
        CAST(value * 0.01 AS FLOAT),
        CAST(value * 0.02 AS FLOAT),
        CAST(value * 0.03 AS FLOAT),
        CAST(value * 0.04 AS FLOAT),
        CAST(value * 0.05 AS FLOAT)
    ) AS VECTOR(5))
FROM GENERATE_SERIES(1, 100);
GO

-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (METRIC = 'cosine', TYPE = 'diskann');
GO

-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP(3) WITH APPROXIMATE
    t.id,
    t.title,
    t.content,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = Articles AS t,
        COLUMN = embedding,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS s
ORDER BY s.distance, t.title;

A sintaxe para a consulta depende da versão do índice vetorial:

Versão do índice vetorial Exemplo de sintaxe
Versão mais recente Utilização SELECT TOP (N) WITH APPROXIMATE sem TOP_N parâmetro
Versões anteriores (obsoletas) Usar TOP_N parâmetro na VECTOR_SEARCH função

Para índices de versões anteriores (sintaxe obsoleta):

DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP(3)
    t.id,
    t.title,
    t.content,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = Articles AS t,
        COLUMN = embedding,
        SIMILAR_TO = @qv,
        METRIC = 'cosine',
        TOP_N = 3
    ) AS s
ORDER BY s.distance, t.title;

Exemplo 4: Trabalhar com operações DML

Os exemplos seguintes demonstram operações DML numa tabela com um índice vetorial criado usando a versão mais recente.

Excluir linhas

Eliminar linhas remove-as tanto da tabela como dos resultados de pesquisa vetorial.

DELETE FROM dbo.wikipedia_articles
WHERE id = 12345;

Depois de concluída a eliminação, a linha removida deixa de aparecer nas consultas de pesquisa vetorial.

Inserir novas linhas

Podes inserir novas linhas com embeddings, e tornam-se imediatamente pesquisáveis sem teres de reconstruir o índice.

INSERT INTO dbo.wikipedia_articles (id, title, title_vector)
VALUES (
    99999,
    N'Quantum Computing Basics',
    AI_GENERATE_EMBEDDINGS(N'Quantum Computing Basics' USE MODEL Ada2Embeddings)
);

As incorporações recém-inseridas são automaticamente incorporadas no índice vetorial e podem ser devolvidas por consultas vetoriais subsequentes.

Atualizar linhas existentes

A atualização de colunas vetoriais ou não vetoriais é totalmente suportada.

DECLARE @new_embedding VECTOR(1536);
SET @new_embedding = AI_GENERATE_EMBEDDINGS(N'Updated article title' USE MODEL Ada2Embeddings);

UPDATE dbo.wikipedia_articles
SET title_vector = @new_embedding,
    title = N'Updated article title'
WHERE id = 50000;

Se uma coluna vetorial for atualizada, o índice é atualizado em conformidade, para que futuras pesquisas vetoriais utilizem a nova incorporação.

Usar o MERGE para operações complexas

A MERGE instrução permite-lhe realizar operações de inserção, atualização e eliminação numa única instrução.

MERGE INTO dbo.wikipedia_articles AS target
USING (
    SELECT 
        id,
        title,
        AI_GENERATE_EMBEDDINGS(title USE MODEL Ada2Embeddings) AS title_vector
    FROM dbo.staging_articles
) AS source
ON target.id = source.id
WHEN MATCHED THEN
    UPDATE SET 
        title = source.title,
        title_vector = source.title_vector
WHEN NOT MATCHED BY TARGET THEN
    INSERT (id, title, title_vector)
    VALUES (source.id, source.title, source.title_vector)
WHEN NOT MATCHED BY SOURCE AND target.id > 100000 THEN
    DELETE;

O índice vetorial é automaticamente atualizado para refletir todas as alterações feitas pela MERGE afirmação.