適用於: SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
使用近似最近鄰向量搜尋演算法搜尋類似於指定查詢向量的向量。 若要深入瞭解向量索引和向量搜尋的運作方式,以及精確搜尋和近似搜尋之間的差異,請參閱 SQL 資料庫引擎中的向量搜尋和向量索引。
Fabric 中的 Azure SQL 資料庫和 SQL 資料庫
此功能目前仍在預覽階段。 在使用之前,請務必先查看 目前的限制 。
備註
作為預覽功能,本文所述的技術受限於 Microsoft Azure 預覽版增補使用規定。
SQL Server 2025 預覽功能
在 SQL Server 2025 中,此函式仍處於預覽階段,可能會有所變動。 若要使用此功能,您必須啟用 PREVIEW_FEATURES資料庫範圍的組態。
在使用之前,請務必先查看 目前的限制 。
Syntax
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 具有模擬內嵌的函式:
- 啟用目前預覽中必要的追蹤旗標。
- 使用數據類型
dbo.Articles的數據行embedding建立範例數據表。 - 使用模擬內嵌數據插入範例數據。
- 在上
dbo.Articles.embedding建立向量索引。 - 使用函式示範向量相似度搜尋
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;