VECTOR_SEARCH(Transact-SQL) (预览版)

适用于: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

使用近似相邻向量搜索算法搜索类似于给定查询矢量的矢量。 若要详细了解矢量索引和矢量搜索的工作原理,以及精确搜索和近似搜索之间的差异,请参阅 SQL 数据库引擎中的矢量搜索和矢量索引

Azure SQL 数据库与 Fabric 中的 SQL 数据库

该功能目前处于预览阶段。 在使用之前,请确保先查看 当前限制

注释

作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款

SQL Server 2025 预览功能

在 SQL Server 2025 中,该功能处于预览阶段,可能会有变更。 若要使用此功能,必须启用 PREVIEW_FEATURES数据库范围的配置

在使用之前,请确保先查看 当前限制

Syntax

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 = 对象 [AS source_table_alias]

执行搜索的表。 它必须是基表。 不支持视图、临时表(本地表和全局表)。

列 = vector_column

在其中执行搜索的向量列。 该列必须是 矢量 数据类型。

SIMILAR_TO = query_vector

用于搜索的向量。 它必须是 矢量 类型的变量或列。

METRIC = { 'cosine' |'dot' |'euclidean' }

用于计算查询向量与指定列中矢量之间的距离的距离指标。 仅当找到与同一个指标和同一列匹配的 ANN 索引时,才使用 ANN(近似近邻)索引。 如果没有兼容的 ANN 索引,则会引发警告,并使用 KNN (k-Nearest Neighbor) 算法。

TOP_N = <k>

必须返回的最大相似向量数。 它必须是正 整数

result_table_alias

别名用于引用结果集。

返回结果集

函数返回 VECTOR_SEARCH 的结果集包括:

  • 参数中指定的 TABLE 表中的所有列。

  • 一个名为 distance的另一列,表示参数指定的 COLUMN 列中向量与参数中 SIMILAR_TO 提供的向量之间的距离。

距离列由 VECTOR_SEARCH 函数本身生成,而所有其他列都来自参数中引用的 TABLE 表。

如果使用参数中表的 TABLE 别名,则必须使用相同的别名来引用语句中的 SELECT 列。 不能使用分配给 VECTOR_SEARCH 引用表中指定 TABLE列的别名。 如果认为通过获取表数据的输出 VECTOR_SEARCH 并合并结果集,可以更轻松地理解此行为。

如果参数中指定的 TABLE 表已包含一 distance个名为列,该行为将类似于两个共享列名称的表之间的 SQL 联接。 在这种情况下,必须使用表别名来消除列引用的歧义,否则将引发错误。

Limitations

当前预览版具有以下限制:

仅筛选后

矢量搜索在应用任何谓词之前发生。 仅当返回最相似的向量后,才会应用其他谓词。 下面的示例返回与查询向量 @qv最相似的嵌入的前 10 行,然后应用子句中指定的 WHERE 谓词。 如果与矢量搜索返回的向量关联的 10 行中没有等于 accepted 1 的列,则结果为空。

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

VECTOR_SEARCH 不能在视图正文中使用。

Examples

示例 1

以下示例查找表中最相似的 10 篇文章Pink Floyd music stylewikipedia_articles_embeddings

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

示例 2

与示例 1 相同,但这次查询向量是从另一个表而不是变量中获取的。

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;

示例 3

使用和相关CREATE VECTOR INDEX函数的基本端到端示例VECTOR_SEARCH。 将模拟嵌入内容。 在实际方案中,嵌入使用嵌入模型和 AI_GENERATE_EMBEDDINGSOpenAI SDK 等外部库生成。

以下代码块演示 VECTOR_SEARCH 了具有模拟嵌入的函数:

  1. 启用当前预览版中必需的跟踪标志。
  2. 使用数据类型dbo.Articles的列embedding创建示例表
  3. 使用模拟嵌入数据插入示例数据。
  4. 在 . 上 dbo.Articles.embedding创建向量索引。
  5. 使用函数演示矢量相似性搜索 VECTOR_SEARCH
-- 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;