共用方式為


VECTOR_SEARCH (Transact-SQL) (預覽)

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

使用近似最近鄰向量搜尋演算法搜尋類似於指定查詢向量的向量。 若要深入瞭解向量索引和向量搜尋的運作方式,以及精確搜尋和近似搜尋之間的差異,請參閱 SQL 資料庫引擎中的向量搜尋和向量索引

Fabric 中的 Azure SQL 資料庫和 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

目前的預覽有下列限制:

僅後置過濾器

向量搜尋會在套用任何述詞之前發生。 只有在傳回最類似的向量之後,才會套用其他述詞。 下列範例會傳回前 10 個數據列,內嵌最類似於查詢向量 @qv,然後套用 子句中指定的 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 style 最類似的文章wikipedia_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_EMBEDDINGS,或 OpenAI 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;