Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
Suchen Sie nach Vektoren, die einem bestimmten Abfragevektor ähneln, mithilfe eines ungefähren Nächstenvektorsuchalgorithmus. Weitere Informationen zur Funktionsweise der Vektorindizierung und Vektorsuche sowie der Unterschiede zwischen exakter und ungefährer Suche finden Sie unter Vektorsuche und Vektorindizes im SQL-Datenbankmodul.
Azure SQL-Datenbank und SQL-Datenbank in Fabric
Die Funktion ist noch in der Vorschau. Überprüfen Sie die aktuellen Einschränkungen , bevor Sie sie verwenden.
Hinweis
Als Previewfunktion unterliegt die in diesem Artikel vorgestellte Technologie den zusätzlichen Nutzungsbedingungen für Microsoft Azure-Vorschauen.
SQL Server 2025 Vorschaufunktion
In SQL Server 2025 befindet sich diese Funktion in der Vorschau und kann sich ändern. Um dieses Feature verwenden zu können, müssen Sie die PREVIEW_FEATURESDatenbankbereichskonfiguration aktivieren.
Überprüfen Sie die aktuellen Einschränkungen , bevor Sie sie verwenden.
Syntax
Transact-SQL-Syntaxkonventionen
VECTOR_SEARCH(
TABLE = object [ AS source_table_alias ]
, COLUMN = vector_column
, SIMILAR_TO = query_vector
, METRIC = { 'cosine' | 'dot' | 'euclidean' }
, TOP_N = k
) [ AS result_table_alias ]
Arguments
TABLE = Objekt [AS source_table_alias]
Tabelle, in der die Suche ausgeführt wird. Es muss sich um eine Basistabelle sein. Ansichten, temporäre Tabellen, sowohl lokal als auch global, werden nicht unterstützt.
SPALTE = vector_column
Die Vektorspalte, in der die Suche ausgeführt wird. Die Spalte muss ein Vektordatentyp sein.
SIMILAR_TO = query_vector
Der für die Suche verwendete Vektor. Es muss sich um eine Variable oder eine Spalte vom Vektortyp sein.
METRIC = { 'Kosinus' | 'dot' | 'euklidan' }
Die Entfernungsmetrik, die zum Berechnen des Abstands zwischen dem Abfragevektor und den Vektoren in der angegebenen Spalte verwendet wird. Ein ANN-Index (Näherste Nachbar) wird nur verwendet, wenn ein übereinstimmender ANN-Index mit derselben Metrik und in derselben Spalte gefunden wird. Wenn keine kompatiblen ANN-Indizes vorhanden sind, wird eine Warnung ausgelöst, und der KNN-Algorithmus (k-Nearest Neighbor) wird verwendet.
TOP_N = <k>
Die maximale Anzahl ähnlicher Vektoren, die zurückgegeben werden müssen. Es muss eine positive ganze Zahl sein.
result_table_alias
Der Alias wird verwendet, um auf das Resultset zu verweisen.
Ergebnissatz zurückgeben
Das von der VECTOR_SEARCH Funktion zurückgegebene Resultset umfasst:
Alle Spalten aus der im
TABLEArgument angegebenen Tabelle.Eine zusätzliche Spalte mit dem Namen
distance, die den Abstand zwischen dem Vektor in der spalte darstellt, die durch dasCOLUMNArgument und den imSIMILAR_TOArgument angegebenen Vektor angegeben ist.
Die Abstandsspalte wird von der VECTOR_SEARCH Funktion selbst generiert, während alle anderen Spalten aus der Tabelle stammen, auf die TABLE im Argument verwiesen wird.
Wenn Sie einen Alias für die Tabelle im TABLE Argument verwenden, müssen Sie diesen Alias verwenden, um auf die Spalten in der SELECT Anweisung zu verweisen. Sie können den Alias, der zugewiesen ist, nicht verwenden, VECTOR_SEARCH um auf Spalten aus der in TABLEder Tabelle angegebenen zu verweisen. Dieses Verhalten ist einfacher zu verstehen, wenn Sie sich das resultset vorstellen, das erstellt wurde, indem Sie die Ausgabe der VECTOR_SEARCH Tabelle mit den Tabellendaten zusammenführen.
Wenn die im TABLE Argument angegebene Tabelle bereits eine Spalte mit dem Namen distanceenthält, ähnelt das Verhalten einer SQL-Verknüpfung zwischen zwei Tabellen, die einen Spaltennamen verwenden. In solchen Fällen müssen Sie Tabellenalias verwenden, um die Spaltenverweise zu disambiguieren. Andernfalls wird ein Fehler ausgelöst.
Limitations
Die aktuelle Vorschau hat die folgenden Einschränkungen:
Nur nach dem Filtern
Die Vektorsuche erfolgt vor dem Anwenden eines Prädikats. Zusätzliche Prädikate werden erst angewendet, nachdem die meisten ähnlichen Vektoren zurückgegeben wurden. Im folgenden Beispiel werden die obersten 10 Zeilen mit Einbettungen zurückgegeben, die dem Abfragevektor @qvam ähnlichsten sind. Anschließend wird das in der WHERE Klausel angegebene Prädikat angewendet. Wenn keine der 10 Zeilen, die den von der Vektorsuche zurückgegebenen Vektoren zugeordnet sind, die accepted Spalte 1 aufweist, ist das Ergebnis leer.
SELECT TOP (10) s.id,
s.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.sessions AS s,
COLUMN = embedding,
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10
) AS r
WHERE accepted = 1
ORDER BY r.distance;
VECTOR_SEARCH kann in Ansichten nicht verwendet werden.
VECTOR_SEARCH kann nicht im Textkörper einer Ansicht verwendet werden.
Examples
Beispiel 1
Im folgenden Beispiel werden die 10 ähnlichsten Artikel in der Pink Floyd music stylewikipedia_articles_embeddings Tabelle gefunden.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDING(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) s.id,
s.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = [dbo].[wikipedia_articles_embeddings] as t,
COLUMN = [content_vector],
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10
) AS s
ORDER BY s.distance
Beispiel 2
Identisch mit Beispiel 1, aber diesmal werden die Abfragevektoren aus einer anderen Tabelle anstelle einer Variablen verwendet.
CREATE TABLE #t
(
id INT,
q NVARCHAR (MAX),
v VECTOR(1536)
);
INSERT INTO #t
SELECT id,
q,
AI_GENERATE_EMBEDDINGS(q USE MODEL Ada2Embeddings)
FROM (VALUES (1, N'four legged furry animal'),
(2, N'pink floyd music style')
) AS S(id, q);
SELECT TOP (10) t.id,
s.distance,
t.title
FROM #t AS qv
CROSS APPLY VECTOR_SEARCH(
TABLE = [dbo].[wikipedia_articles_embeddings] AS t,
COLUMN = [content_vector],
SIMILAR_TO = qv.v,
METRIC = 'cosine',
TOP_N = 10
) AS s
WHERE qv.id = 2
ORDER BY s.distance;
Beispiel 3
Ein einfaches End-to-End-Beispiel mit CREATE VECTOR INDEX und der zugehörigen VECTOR_SEARCH Funktion. Die Einbettungen werden simuliert. In einem realen Szenario werden Einbettungen mithilfe eines Einbettungsmodells und AI_GENERATE_EMBEDDINGS oder einer externen Bibliothek wie dem OpenAI SDK generiert.
Der folgende Codeblock veranschaulicht die VECTOR_SEARCH Funktion mit simulierten Einbettungen:
- Aktiviert die Ablaufverfolgungskennzeichnung, die in der aktuellen Vorschau erforderlich ist.
- Erstellen Sie eine Beispieltabelle
dbo.Articlesmit einer Spalteembeddingmit Datentypvektor(5). - Fügen Sie Beispieldaten mit simulierten Einbettungsdaten ein.
- Erstellen Sie einen Vektorindex für
dbo.Articles.embedding. - Veranschaulichen Sie die Vektor-Ähnlichkeitssuche mit der
VECTOR_SEARCHFunktion.
-- Step 0: Enable Preview Feature
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
INSERT INTO Articles (id, title, content, embedding)
VALUES (1, 'Intro to AI', 'This article introduces AI concepts.', '[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, 'Deep Learning', 'Deep learning is a subset of ML.', '[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, 'Neural Networks', 'Neural networks are powerful models.', '[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, 'Machine Learning Basics', 'ML basics for beginners.', '[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, 'Advanced AI', 'Exploring advanced AI techniques.', '[0.5, 0.4, 0.6, 0.1, 0.2]');
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)
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;