用途:在本地运行的 Azure SQL Database 容器内实现向量存储、相似度搜索与 RAG 检索,直接用引擎的原生 VECTOR(n) 类型和 VECTOR_DISTANCE,无需额外向量存储。注意目标镜像是 sqldbpreview-dpgaeqhmgphzd4bk.azurecr.io/azure-sql/db-dev:latest(需先 docker login),不是 mcr.microsoft.com/mssql/server;用 SELECT SERVERPROPERTY('EngineEdition') 应为 5、Edition 为 SQL Azure 确认。
主要能力:创建含 embedding VECTOR(n) 列的表;用 CAST(CAST(? AS NVARCHAR(MAX)) AS VECTOR(n)) 写入 JSON 数组形式的向量;按 VECTOR_DISTANCE('cosine',...) 升序取 top-k 实现语义检索,再拼入提示词构成 RAG。也支持 CREATE VECTOR INDEX(DiskANN,METRIC='cosine', TYPE='diskann')近似检索,小表用全量扫描同样正确。
使用方式:引擎不会自动建库,需在 master 连接执行 CREATE DATABASE appdb,之后一律用连接串 Database=appdb(或 sqlcmd -d appdb),不要用 USE 切换库(用户库会话返回 Msg 40508)。维度 n 必须是字面量,不能作为绑定参数,需与 embed() 输出维度一致(如 768、1536)。嵌入模型是唯一的网络调用,示例用本地 Ollama /api/embed。
限制:vector(n) 上限 1998 维(Msg 2717),且维度过期无法 ALTER 加宽,换模型需新列并重新嵌入。建向量索引需表内非空向量至少 100 行(Msg 42266);索引存在时 TRUNCATE TABLE 被拒(Msg 42232),可用 DELETE;DROP VECTOR INDEX 不存在,用 DROP INDEX ... ON;CREATE VECTOR INDEX 前必须 SET QUOTED_IDENTIFIER ON。容器上向量索引与安全策略不能共存(Msg 37579 / 42244),同一表需权衡租户过滤与索引。