Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
S’applique à : SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
Recherchez des vecteurs similaires à des vecteurs de requête donnés à l’aide d’un algorithme de recherche de vecteurs voisin le plus proche. Pour en savoir plus sur le fonctionnement de l’indexation vectorielle et de la recherche vectorielle et les différences entre la recherche exacte et approximative, reportez-vous à la recherche vectorielle et aux index vectoriels dans le moteur de base de données SQL.
Base de données Azure SQL et base de données SQL dans Fabric
La fonctionnalité est en aperçu. Veillez à consulter les limitations actuelles avant de l’utiliser.
Note
En tant que fonctionnalité en préversion, la technologie présentée dans cet article est soumise aux conditions d’utilisation supplémentaires des préversions de Microsoft Azure.
Fonctionnalité d’aperçu de SQL Server 2025
Dans SQL Server 2025, cette fonction est en aperçu et peut être modifiée. Pour utiliser cette fonctionnalité, vous devez activer la PREVIEW_FEATURES la base de données.
Veillez à consulter les limitations actuelles avant de l’utiliser.
Syntax
Conventions de la syntaxe Transact-SQL
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 = objet [AS source_table_alias]
Table sur laquelle effectuer la recherche. Il doit s’agir d’une table de base. Les vues, les tables temporaires, locales et globales, ne sont pas prises en charge.
COLONNE = vector_column
Colonne vectorielle dans laquelle la recherche est effectuée. La colonne doit être un type de données vectorielle .
SIMILAR_TO = query_vector
Vecteur utilisé pour la recherche. Il doit s’agir d’une variable ou d’une colonne de type vectoriel .
METRIC = { 'cosin' | 'dot' | 'euclidean' }
Métrique de distance utilisée pour calculer la distance entre le vecteur de requête et les vecteurs de la colonne spécifiée. Un index ANN (Voisin le plus proche approximatif) est utilisé uniquement si un index ANN correspondant, avec la même métrique et sur la même colonne, est trouvé. S’il n’existe aucun index ANN compatible, un avertissement est déclenché et l’algorithme KNN (k-Nearest Neighbor) est utilisé.
TOP_N = <k>
Nombre maximal de vecteurs similaires qui doivent être retournés. Il doit s’agir d’un entier positif.
result_table_alias
L’alias est utilisé pour référencer le jeu de résultats.
Retourner le jeu de résultats
Le jeu de résultats retourné par la VECTOR_SEARCH fonction inclut :
Toutes les colonnes de la table spécifiées dans l’argument
TABLE.Colonne supplémentaire nommée
distance, qui représente la distance entre le vecteur dans la colonne spécifiée par l’argumentCOLUMNet le vecteur fourni dans l’argumentSIMILAR_TO.
La colonne de distance est générée par la VECTOR_SEARCH fonction elle-même, tandis que toutes les autres colonnes proviennent de la table référencée dans l’argument TABLE .
Si vous utilisez un alias pour la table dans l’argument TABLE , vous devez utiliser ce même alias pour référencer ses colonnes dans l’instruction SELECT . Vous ne pouvez pas utiliser l’alias affecté pour référencer VECTOR_SEARCH des colonnes à partir de la table spécifiée dans TABLE. Ce comportement est plus facile à comprendre si vous pensez au jeu de résultats généré en prenant la sortie et en la fusionnant avec les données de VECTOR_SEARCH table.
Si la table spécifiée dans l’argument TABLE contient déjà une colonne nommée distance, le comportement sera similaire à une jointure SQL entre deux tables qui partagent un nom de colonne. Dans ce cas, vous devez utiliser des alias de table pour lever l’ambiguïté des références de colonne ; sinon, une erreur est générée.
Limitations
La préversion actuelle présente les limitations suivantes :
Post-filtre uniquement
La recherche vectorielle se produit avant d’appliquer un prédicat. Les prédicats supplémentaires sont appliqués uniquement après le retour des vecteurs les plus similaires. L’exemple suivant retourne les 10 premières lignes avec des incorporations les plus similaires au vecteur @qvde requête, puis applique le prédicat spécifié dans la WHERE clause. Si aucune des 10 lignes associées aux vecteurs retournés par la recherche vectorielle n’a la accepted colonne égale à 1, le résultat est vide.
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 ne peuvent pas être utilisés dans les vues
VECTOR_SEARCH ne peut pas être utilisé dans le corps d’une vue.
Examples
Exemple 1
L’exemple suivant recherche les 10 articles les plus similaires au Pink Floyd music stylewikipedia_articles_embeddings tableau.
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
Exemple 2
Identique à l’exemple 1, mais cette fois, les vecteurs de requête proviennent d’une autre table au lieu d’une variable.
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;
Exemple 3
Exemple de base de bout en bout utilisant CREATE VECTOR INDEX et de la fonction associée VECTOR_SEARCH . Les incorporations sont simulées. Dans un scénario réel, les incorporations sont générées à l’aide d’un modèle d’incorporation et de AI_GENERATE_EMBEDDINGS, ou d’une bibliothèque externe telle qu’OpenAI SDK.
Le bloc de code suivant illustre la VECTOR_SEARCH fonction avec des incorporations fictifs :
- Active l’indicateur de trace, nécessaire dans la préversion actuelle.
- Créez un exemple de table
dbo.Articlesavec une colonneembeddingavec un vecteur de type de données (5). - Insérez des exemples de données avec des données d’incorporation simulées.
- Créez un index vectoriel sur
dbo.Articles.embedding. - Illustrez la recherche de similarité vectorielle avec la
VECTOR_SEARCHfonction.
-- 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;