CREATE VECTOR INDEX (Transact-SQL)

Platí pro: SQL Server 2025 (17.x) Azure SQL DatabaseSpravovaná instance Azure SQLSQL databáze v Microsoft Fabric

Vytvořte přibližný index ve sloupci vektoru pro zlepšení výkonu vyhledávání nejbližších sousedů. Chcete-li se dozvědět více o tom, jak funguje vektorové indexování a vektorové vyhledávání a jaké jsou rozdíly mezi přesným a přibližným vyhledáváním, viz Vektorové vyhledávání a vektorové indexy v SQL Database Engine.

Dostupnost funkcí

  • Vektorový index a VECTOR_SEARCH jsou obecně dostupné (GA) v Azure SQL Database, SQL databáze v Microsoft Fabric a Azure SQL Managed Instance s politikou aktualizace vždy up-todata.
  • Vector index a VECTOR_SEARCH jsou náhledové funkce v SQL Server 2025 (17.x) a v Azure SQL Managed Instance s aktualizační politikou SQL Server 2025.

Výstraha

Oznámení o ukončení provozu: Vektorové indexy vytvořené pomocí starší datové struktury jsou v aktuální verzi podporovány, ale v budoucí verzi budou vyřazeny. Pro zajištění budoucí kompatibility a přístupu k nejnovějším možnostem vektorového vyhledávání migrujte stávající vektorové indexy pomocí kroků v sekci Migrace z předchozích verzí vektorových indexů .

Funkce náhled SQL Server 2025

V SQL Server 2025 a Azure SQL Managed Instance v aktualizační politiceSQL Server 2025 jsou vektorové indexy a funkce VECTOR_SEARCH v náhledu a podléhají změnám. Pro použití této funkce musíte povolit konfiguraci zaměřenou PREVIEW_FEATURESna databázi.

Před použitím si zkontrolujte aktuální omezení .

Poznámka:

Nejnovější verze vektorových indexů je dostupná v Azure SQL Database, SQL databázi v Microsoft Fabric a Azure SQL Managed Instance s pravidelou aktualizace vždy up-todata.

Syntaxe

Transact-SQL konvence syntaxe

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" } ]
[;]

Argumenty

index_name

Název indexu. Názvy indexů musí být v tabulce jedinečné, ale nemusí být jedinečné v rámci databáze. Názvy indexů musí dodržovat pravidla identifikátorů .

objekt

Tabulka, na které je index vytvořen. Musí to být základní tabulka. Zobrazení, dočasné tabulky, místní i globální, se nepodporují.

vector_column

Sloupec, který se má použít k vytvoření vektorového indexu. Musí být typu vektoru .

METRICKÝ

Řetězec s názvem metriky vzdálenosti, který se má použít k výpočtu vzdálenosti mezi těmito dvěma vektory. Podporují se následující metriky vzdálenosti:

  • cosine - Kosinus vzdálenost
  • euclidean - Euklidská vzdálenost
  • dot - (záporná) tečka

TYPE

Typ algoritmu ANN , který se používá k sestavení indexu. V současné době se podporuje pouze DiskANN. DiskANN je výchozí hodnota.

MAXDOP

Přepíše maximální stupeň paralelismu možnost konfigurace pro operaci indexu. Další informace naleznete v tématu Konfigurace serveru: maximální stupeň paralelismu. Pomocí MAXDOP omezte stupeň paralelismu a výsledné spotřeby prostředků pro operaci sestavení indexu.

max_degree_of_parallelism může být:

  • 1

    Potlačuje vytvoření paralelního plánu.

  • >1

    Omezuje maximální stupeň paralelismu použitý v operaci paralelního indexu na zadané číslo nebo méně na základě aktuální systémové úlohy.

  • 0 (výchozí)

    Používá stupeň paralelismu zadaný na úrovni serveru, databáze nebo skupiny úloh, pokud není omezen na základě aktuální systémové úlohy.

    Další informace najdete v tématu Konfigurace paralelních operací indexu.

    Paralelní operace indexu nejsou k dispozici v každé edici SQL Serveru. Pro seznam funkcí podporovaných edicí v SQL Server viz Edice a podporované funkce SQL Server 2025.

Upgrade vektorových indexů na nejnovější verzi

Důležité

Oznámení o ukončení provozu: Aktuální verze podporuje vektorové indexy vytvořené pomocí starší datové struktury, ale budoucí verze tuto podporu ukončí. Pro zajištění budoucí kompatibility a přístupu k nejnovějším možnostem vektorového vyhledávání migrujte stávající vektorové indexy pomocí následujících kroků.

Nově vytvořené vektorové indexy automaticky používají nejnovější datovou strukturu, která poskytuje:

  • Úplná podpora DML: Odebere předchozí omezení, které po vytvoření indexu indexovaly vektorové tabulky jen pro čtení. Nyní můžete provádět INSERToperace , UPDATE, DELETE, a MERGE přitom zachovat funkčnost vektorového indexu s automatickou, v reálném čase údržbou indexu.
  • Iterativní filtrování: Aplikuje predikáty v klauzuli WHERE během procesu vektorového vyhledávání, nikoli po jejím vyhledání.
  • Optimalizátor řízený: Optimalizátor dotazů automaticky rozhoduje, zda použít index DiskANN nebo vyhledávání kNN na základě charakteristik dotazu.
  • Pokročilá kvantizace: Integruje techniky vektorové kvantizace pro lepší efektivitu ukládání a rychlejší provádění dotazů. Tyto optimalizace jsou pro uživatele transparentní.

Podrobnosti o dřívějších omezeních verzí vektorového indexu naleznete v sekci Omezení a úvahy.

Migrace ze starších verzí vektorového indexu

Pro umožnění nejnovějších funkcí musíte vyřadit a znovu vytvořit vektorové indexy, které používají starší verzi. Tato část vysvětluje, jak identifikovat, migrovat a ověřit verze vektorových indexů.

Krok 1: Identifikace existujících indexů vektorů

Pomocí následujícího dotazu identifikujte vektorové indexy, které vyžadují migraci:

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;
Jak interpretovat výsledky

Používá nejnovější verzi.

  • Již podporuje iterativní filtrování, plnou podporu DML, optimalizátorem řízené provádění a vylepšenou kvantizaci.
  • Nevyžaduje se žádná migrace.

Vytvořeno pomocí starší verze

  • Používá starší chování po vyfiltrování.
  • Nepodporuje nejnovější možnosti vektorového vyhledávání.
  • Migrace je důrazně doporučována pro zajištění budoucí kompatibility.

Krok 2: Vyřazení a opětovné vytvoření vektorového indexu

Nelze upgradovat vektorové indexy, které používají starší formát. Pokud chcete povolit nejnovější funkce DiskANN, odstraňte a znovu vytvořte index.

Výstraha

Dopad služby: Vyřazení vektorového indexu okamžitě zakáže přibližné vektorové vyhledávání v ovlivněné tabulce, dokud se index znovu nevytvoří. Naplánujte migrace během časových období údržby pro produkční systémy.

Vyřazení existujícího indexu
DROP INDEX vec_idx ON dbo.wikipedia_articles;
Opětovné vytvoření indexu
CREATE VECTOR INDEX vec_idx
    ON dbo.wikipedia_articles (title_vector)
    WITH (
        TYPE = 'DISKANN',
        METRIC = 'COSINE'
    );

Poznámka:

Vektorové indexy vytvořené pomocí aktuálního příkazu CREATE VECTOR INDEX automaticky používají nejnovější formát DiskANN. Nejsou vyžadovány žádné další možnosti ani příznaky.

Krok 3: Ověření verze indexu

Po znovuvytvoření indexu ověřte, že používá nejnovější verzi:

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';

Sloupec index_version by se měl zobrazit 3 pro nejnovější verzi.

Chování chyby s nekompatibilitou verze

Pokud se pokusíte použít TOP_N parametr s VECTOR_SEARCH nejnovějším indexem vektoru verze, vrátí SQL Server následující chybu:

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

Pokud chcete tuto chybu vyřešit, odeberte TOP_N parametr VECTOR_SEARCH a místo toho použijte SELECT TOP (N) WITH APPROXIMATE syntaxi. Podrobné informace naleznete v tématu Chyba s využitím starší syntaxe.

Omezení a úvahy

Omezení verzí starších vektorových indexů

Starší verze vektorového indexu mají následující omezení. Pokud chcete zkontrolovat verzi indexu, přečtěte si téma Ověření verze indexu.

  • Pouze po filtrování: Predikáty platí až po získání vektorů, nikoli během vyhledávacího procesu. Toto chování může vést k tomu, že při aplikaci filtrů se vrátí méně řádků, než se očekává.

  • Tabulky jen pro čtení: Tabulky s vektorovými indexy jsou jen pro čtení. Po vytvoření vektorového indexu nelze provádět DML operace (INSERT, UPDATE, DELETE, MERGE), ALLOW_STALE_VECTOR_INDEX Pokud můžete tolerovat zastaralé výsledky hledání, použijte konfiguraci s vymezeným oborem databáze k povolení operací DML.

  • Manuální ladění TOP_N: Musíte ručně upravit TOP_N parametr vstupu VECTOR_SEARCH , abyste kompenzovali post-filtrování. Často potřebujete předimenzované hodnoty, abyste dosáhli požadovaného počtu výsledků.

Aktuální omezení (platí i pro nejnovější verzi)

Aktuální verze Preview má následující omezení:

  • Indexy vektorů nelze rozdělit.

  • Tabulka musí mít primární klíčový shlukovaný index na sloupci int .

  • Vektorové indexy nejsou replikovány odběratelům.

  • Nemůžete zkracovat tabulky s vektorovými indexy použitím TRUNCATE TABLE. Pokud chcete odebrat všechna data, nejprve odstraňte vektorový index, zkrátte tabulku, znovu zaplňte alespoň 100 řádků a pak znovu vytvořte index. Pro více informací viz TRUNCATE TABLE omezení.

  • Vektorové indexy nelze nasadit s DacPacem. Databáze obsahující vektorové indexy můžete nasadit pomocí BACPAC od verze DacFx 170.5.96. Vektorové indexy se vytvářejí po načtení dat tabulky a indexovaná tabulka musí obsahovat alespoň 100 řádků sNULL nevektorovými hodnotami.

    Během nasazení DACPAC pouze se schématem může nasazení uspět bez vytvoření vektorového indexu, pokud cílová tabulka obsahuje méně než 100 řádků sNULL nevektorovými hodnotami. DacFx automaticky nevytvoří přeskočený index, když se později přidají řádky. Po načtení alespoň 100 kvalifikačních řádků vytvořte vektorový index pomocí post-deployment skriptu, znovu publikujte DACPAC nebo spusťte CREATE VECTOR INDEX.

    Po importu nebo nasazení ověřte, že vektorový index byl vytvořen, dotazem .sys.vector_indexes

    Jako řešení před verzí DacFx 170.5.96 se vektorové indexy před exportem databáze vynechávají a indexy se znovu vytvářejí po importu.

Minimální požadavky na data

Vektorové indexy vyžadují minimální počet řádků sNULL nevektorovými hodnotami, než můžete index vytvořit.

  • Minimální počet řádků: Tabulka musí obsahovat alespoň 100 řádků sNULL ne-vektorovými hodnotami.
  • Chybové chování: Pokud se pokusíte vytvořit vektorový index v tabulce s méně než 100 řádky, operace selže a vrátí chybu Msg 42266.

Příklad chyby :

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.

Osvědčený postup: Před vytvořením vektorového indexu naplňte tabulku alespoň 100 řádky. Pro vývojové a testovací scénáře, kde potřebujete méně řádků, funguje VECTOR_SEARCH bez indexu pomocí hrubého skenování. Tato metoda však snižuje výkon u větších datových sad.

Podpora DML

Když vytvoříte vektorový index DiskANN pomocí nejnovější verze, tabulka už není pouze pro čtení. Data můžete upravovat pomocí standardních operací pro manipulaci s daty (DML) a změny se automaticky objeví ve výsledcích vektorového vyhledávání.

Díky této funkci se vektorové vyhledávání hodí pro živé transakční úlohy, ve kterých se data v průběhu času mění.

Poznámky k chování

  • Operace DML nevyžadují vyřazení ani opětovné sestavení vektorového indexu.
  • Změny jsou viditelné pro dotazy vektorového vyhledávání po potvrzení transakce.
  • Pokud chcete nahradit data ve velkém měřítku (například odstranit většinu řádků a vložit zcela novou sadu vkládání), zvažte vyřazení a opětovné vytvoření vektorového indexu po načtení dat, abyste zajistili optimální kvalitu vyhledávání.

Poznámka:

Podpora DML je dostupná pouze s vektorovými indexy vytvořenými pomocí nejnovější verze. Starší verze vyžadují, aby tabulky byly jen pro čtení nebo používaly konfiguraci s vymezeným oborem ALLOW_STALE_VECTOR_INDEX databáze.

Monitorování údržby vektorových indexů

Vektorové indexy provádějí údržbu na pozadí, aby zahrnovaly změny DML. Pomocí zobrazení dynamické správy sys.dm_db_vector_indexes monitorujte stav úlohy indexu a údržby.

Kombinování vektorových indexů s tradičními indexy

Vektorové indexy fungují společně s tradičními indexy stromu B, aby poskytovaly optimální výkon dotazů. Při použití iterativního filtrování VECTOR_SEARCHzvažte vytvoření tradičních indexů u sloupců používaných v predikátech filtru.

Podrobné informace o chování iterativního filtrování a o tom, jak se liší od dřívějších verzí, najdete v tématu Chování iterativního filtrování.

Návod

Optimalizátor dotazů automaticky vybere nejlepší strategii provádění (přibližný index nejbližšího souseda vs. hledání kNN). Pokud chcete vynutit použití přibližného indexu nejbližšího souseda, použijte nápovědu FORCE_ANN_ONLY k tabulce. Další informace naleznete v tématu Rady tabulky pro vektorové vyhledávání.

Ukázkový scénář:

-- 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);

Výhoda výkonu:

Při provádění dotazů s iterativním filtrováním používá optimalizátor dotazů SQL Serveru oba typy indexů:

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;

V tomto dotazu:

  • Vektorový index identifikuje podobné vkládání na základě vektoru dotazu.
  • Tradiční index(category) pro kandidáty na filtry efektivně během procesu iterativního vyhledávání

Tato složená strategie může výrazně zlepšit výkon dotazů v porovnání s použitím pouze vektorového indexu, zejména pokud predikáty filtru mají vysokou selektivitu.

Pokyny pro kvalitu a údržbu dat pro indexy vektorů

Vyhněte se datovým sadám s velkými duplicitními vkládáními

Indexování vektorů funguje nejlépe, když vkládání představuje různorodý sémantický obsah. Nepoužívejte datasety s vysokým podílem duplicitních vektorů pro vektorové indexování.

Vysoká duplicita může vést k:

  • Špatná kvalita výsledků: Duplicitní vektory se opakovaně zobrazují ve výsledcích, vytlačují relevantnější sémantické shody.
  • Snížení účinnosti: Duplicitní vkládání vytěsňuje lepší sousedy a snižuje užitečnost vyhledávání podobnosti.
  • Nepotřebné využití prostředků: Vytváření a údržba vektorových indexů je nákladná a duplikáty přidávají náklady bez přidání hodnoty.

Osvědčený postup: Odstranění duplicitních dat vkládání před vytvořením vektorového indexu za účelem zlepšení výkonu i kvality výsledků

Scénáře nahrazení velkých objemů dat

Vektorové indexy podporují vložení, aktualizace a odstranění. Když však nahradíte většinu nebo všechna embeddingy – například opětovné vložení datové sady novým modelem – stávající index už nemusí odrážet nové rozložení dat.

Ve scénářích pro nahrazení ve velkém měřítku:

  • Vektorové vyhledávání stále vrací platné výsledky.
  • Kvalita vybavování a řazení se může zhoršit, protože struktura indexu byla vytvořena pro jiné rozložení embeddingu.

Osvědčený postup: Při provádění nahrazení téměř kompletních dat (odstranění a vložení nových vkládání) odstraňte a znovu vytvořte vektorový index po načtení nových dat. Opětovným vytvořením indexu zajistíte, že je optimalizovaná pro novou distribuci vkládání a obnoví předvídatelné chování dotazů.

Známé problémy

Další informace najdete v tématu Známé problémy.

Povolení

Na ALTER stole potřebujete povolení.

Příklady

Stáhněte a naimportujte článek Wikipedie s ukázkou vkládání vektorů .

Tyto příklady předpokládají tabulku pojmenovanou wikipedia_articles sloupcem title_vector typu vector , který uchovává vložení titulků článků na Wikipedii. Používá title_vector model vkládání jako text-embedding-ada-002 nebo text-embedding-3-small, který vrací vektory s 1 536 dimenzemi.

Pro další příklady, včetně end-to-end řešení, viz Azure SQL Database Vector Search Samples GitHub repozitář.

Příklad 1

Následující příklad vytvoří vektorový index sloupce title_vector pomocí metriky cosine .

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

Příklad 2

Následující příklad vytváří vektorový index ve sloupci title_vector pomocí (záporné) dot součinové metriky. Omezuje paralelizismus na 8 a ukládá vektor do SECONDARY souborové skupiny.

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

Příklad 3

Tento příklad používá CREATE VECTOR INDEX a VECTOR_SEARCH související funkci. Vložené kódy jsou napodobeny. V reálném scénáři generujte embeddingy pomocí embedding modelu a AI_GENERATE_EMBEDDINGS, nebo použijte externí knihovnu, například OpenAI SDK.

Poznámka:

Nejnovější verze vektorových indexů vyžadují alespoň 100 řádků dat, než můžete index vytvořit. Tento příklad vloží 100 řádků, aby tento požadavek splňoval. Další informace najdete v tématu Minimální požadavky na data.

Následující blok kódu ukazuje CREATE VECTOR INDEX napodobení vkládání:

  1. Povolte funkci náhledu (povinnou pouze pro SQL Server 2025; není potřeba pro Azure SQL Database nebo SQL databázi ve Fabric).
  2. Vytvořte ukázkovou tabulku dbo.Articles se sloupcem embedding s vektorem datového typu(5).
  3. Vloží 100 řádků ukázkových dat s napodobenými vloženými daty.
  4. Vytvořte vektorový index na dbo.Articles.embedding.
  5. Předveďte hledání vektorové podobnosti pomocí VECTOR_SEARCH funkce.
-- 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;

Syntaxe pro dotazování závisí na verzi vektorového indexu:

Verze vektorových indexů Příklad syntaxe
Nejnovější verze Použít SELECT TOP (N) WITH APPROXIMATE bez TOP_N parametru
Starší verze (zastaralé) Použití TOP_N parametru ve VECTOR_SEARCH funkci

Pro indexy starších verzí (zastaralá syntaxe):

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;

Příklad 4: Práce s operacemi DML

Následující příklady ukazují DML operace na tabulce s vektorovým indexem vytvořeným pomocí nejnovější verze.

Odstranit řádky

Odstranění řádků je odebere z výsledků hledání tabulek i vektorů.

DELETE FROM dbo.wikipedia_articles
WHERE id = 12345;

Po dokončení operace mazání se odstraněný řádek již v dotazech vektorového vyhledávání neobjevuje.

Vložení nových řádků

Můžete vložit nové řádky s vloženými položkami a okamžitě prohledávat bez opětovného sestavení indexu.

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)
);

Nově vložené vložené objekty se automaticky začlení do vektorového indexu a můžou je vrátit následné dotazy vektorového vyhledávání.

Aktualizace existujících řádků

Aktualizace vektorových nebo ne vektorových sloupců je plně podporovaná.

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;

Pokud aktualizujete vektorový sloupec, index se podle toho aktualizuje, takže budoucí vektorové vyhledávání použijí nové vložení.

Použití MERGE pro složité operace

Tento MERGE příkaz umožňuje provádět operace vložení, aktualizace a odstranění v jednom příkazu.

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;

Vektorový index se automaticky aktualizuje, aby odrážel všechny změny provedené tímto tvrzením MERGE .