第五季·《SQL Server 2025 Unveiled》 本季围绕Bob Ward的最新著作,系统学习SQL Server 2025的前沿特性——从AI集成到Microsoft Fabric,从REST API到事件流,从增强的高可用到智能查询处理。
【上期回顾】
上一期我们学习了Microsoft Fabric深度集成:
Fabric镜像使用Change Feed技术,变更直接写入OneLake,零中间存储
与SQL Server 2016-2022的CDC不同,Change Feed无SQL Agent依赖、自动处理schema变更
每个镜像数据库自动提供SQL Analytics Endpoint,可用T-SQL查询只读副本
镜像计算免费,存储有免费额度,成本效益显著
当前限制:仅限本地Windows、需要Azure Arc、Full Recovery Mode
本期我们将进入SQL Server 2025最激动人心的部分——AI模型与SQL的原生集成。从向量搜索到外部模型调用,从本地模型部署到RAG应用构建,SQL Server 2025让数据库成为企业AI应用的统一平台。
【第一部分】AI集成全景:从向量到模型
1.1 SQL Server 2025的AI就绪战略
SQL Server 2025被微软定义为“AI就绪的企业级数据库”。这不仅仅是一句口号,而是通过三个层面的深度集成来实现的:

这三层能力的协同,使得开发者可以在不离开SQL Server环境的情况下,构建端到端的AI应用。
1.2 核心AI功能速览
| 向量存储与搜索 | |||
| 外部模型调用 | |||
| 本地模型托管 | |||
| 嵌入生成 | |||
| 文本分块 |
1.3 预览功能的启用
部分AI功能处于预览阶段,需要通过数据库级配置启用:
sql
-- 启用预览功能(使用AI向量、ONNX模型等)
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES =ON;
-- 验证启用状态
SELECT name, value_in_use
FROM sys.database_scoped_configurations
WHERE name ='PREVIEW_FEATURES';
-- 查看向量索引信息(预览功能启用后可见)
SELECT * FROM sys.vector_indexes;
⚠️ 重要提醒:预览功能不建议在生产环境使用。根据微软官方发布计划,正式版(GA)预计在2025年底或2026年初发布,届时这些功能将默认可用。
【第二部分】向量搜索:语义检索的核心
2.1 VECTOR数据类型
SQL Server 2025引入了原生的VECTOR数据类型,用于存储AI模型生成的文本嵌入(embeddings)。
sql
-- 创建包含向量列的表
CREATE TABLE dbo.ProductEmbeddings (
ProductID INT PRIMARY KEY,
ProductName NVARCHAR(200),
Description NVARCHAR(MAX),
Embedding VECTOR(1536, float32)
-- 1536维向量,float32精度);
-- 插入向量数据(从AI模型获取的嵌入)
INSERT INTO dbo.ProductEmbeddings
(ProductID, ProductName, Description, Embedding)
VALUES(1,'超轻跑鞋','专为马拉松设计的轻量跑鞋,缓震性能卓越','[''0.012'', ''-0.023'', ''0.045'', ...]'
-- 实际1536个浮点数
);
向量维度说明:
维度数量取决于生成嵌入的AI模型
OpenAI text-embedding-3-small: 1536维
OpenAI text-embedding-3-large: 3072维
本地模型(如mxbai-embed-large-v1): 1024维
2.2 向量距离计算:VECTOR_DISTANCE
VECTOR_DISTANCE
函数计算两个向量之间的相似度,支持多种距离度量:
sql
-- 计算余弦距离(最常用)
DECLARE @searchVector
VECTOR(1536, float32)='[0.015, -0.018, 0.032, ...]';
SELECT
ProductID,
ProductName,
VECTOR_DISTANCE('cosine', Embedding,@searchVector) AS CosineDistance
FROM dbo.ProductEmbeddings
ORDER BY CosineDistance
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
距离度量对比:
| 余弦距离 | 'cosine' | ||
| 欧氏距离 | 'euclidean' | ||
| 点积 | 'dot' |
2.3 DiskANN向量索引
对于大规模向量数据(百万级以上),DiskANN索引提供高效的近似最近邻搜索:
sql
-- 创建DiskANN向量索引
CREATE VECTOR INDEX IX_Product_Embedding
ON dbo.ProductEmbeddings (Embedding)
WITH(
metric ='cosine',type='diskANN',
dimensions =1536,
build_probe_count =20
-- 构建时的探测数量
);
-- 使用向量索引的查询(优化器自动选择)
SELECT TOP 10
ProductID,
ProductName,
VECTOR_DISTANCE('cosine', Embedding,@searchVector) AS Similarity
FROM dbo.ProductEmbeddings
ORDER BY Similarity;
DiskANN的优势:
将向量索引存储在磁盘而非内存,支持百亿级向量
构建速度快,支持增量更新
微软内部用于Outlook邮件搜索、Bing搜索等场景
2.4 混合搜索:向量 + 传统过滤
SQL Server 2025支持将向量搜索与传统关系查询结合:
sql
-- 混合搜索:语义相似 + 价格过滤 + 类别过滤
DECLARE @searchVector VECTOR(1536, float32)='[0.015, -0.018, ...]';
SELECT
p.ProductID,
p.ProductName,
p.Price,
c.CategoryName,
VECTOR_DISTANCE('cosine', pe.Embedding,@searchVector) AS SemanticScore
FROM dbo.Products p
INNER JOIN dbo.ProductEmbeddings pe ON p.ProductID = pe.ProductID
INNER JOIN dbo.Categories c ON p.CategoryID = c.CategoryID
WHERE p.Price BETWEEN 50 AND 200 AND c.CategoryName ='Electronics' AND VECTOR_DISTANCE('cosine', pe.Embedding,@searchVector)<0.5
ORDER BY SemanticScore;
【第三部分】外部AI模型调用:sp_invoke_external_rest_endpoint
3.1 功能概述
sp_invoke_external_rest_endpoint
是SQL Server 2025中最强大的AI集成功能之一,允许从T-SQL直接调用外部REST API服务。这一功能此前仅在Azure SQL Database中可用,现在已下放到本地SQL Server 2025。
核心价值:
无需中间层,直接在数据库层调用AI服务
支持Azure OpenAI、Ollama、NVIDIA NIM等多种AI服务
可在存储过程、触发器中集成AI能力
3.2 配置外部模型
在调用外部模型之前,需要在SQL Server中将其注册为一等实体:
sql
-- 注册外部模型(使用CREATE EXTERNAL MODEL)
CREATE EXTERNAL MODEL AzureGPT4o WITH(
MODEL_TYPE ='OPENAI',
ENDPOINT ='https://your-resource.openai.azure.com/openai/deployments/gpt-4o/chat/completions',
API_KEY ='your-api-key');
-- 注册本地Ollama模型
CREATE EXTERNAL MODEL LocalLlama3
WITH(
MODEL_TYPE ='OLLAMA',
ENDPOINT ='http://localhost:11434/api/generate',
MODEL_NAME ='llama3');
3.3 实战案例:AI生成产品描述
这是一个完整的AI集成示例,展示如何使用Azure OpenAI为产品生成描述:
步骤1:准备产品和描述表
sql
-- 创建产品表和描述表
CREATE TABLE dbo.Products (
ProductID INT PRIMARY KEY,
ProductName NVARCHAR(200),
CategoryID INT,
Brand NVARCHAR(100),
Color NVARCHAR(50),
Gender NVARCHAR(20),
Season NVARCHAR(20),
Price DECIMAL(10,2),
Currency NVARCHAR(3));
CREATE TABLE dbo.ProductDescriptions (
ProductID INTPRIMARYKEY,
Description NVARCHAR(MAX),
GeneratedDate DATETIME2 DEFAULT GETDATE(),Language NVARCHAR(10));
步骤2:创建存储过程调用AI生成描述
sql
CREATE OR ALTER PROCEDURE dbo.GenerateProductDescription
@ProductID INT,
@ApiKey NVARCHAR(200),
@EndpointUrl NVARCHAR(500),
@Language NVARCHAR(20)='English'
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ProductData NVARCHAR(MAX);
DECLARE @Prompt NVARCHAR(MAX);
DECLARE @Payload NVARCHAR(MAX);
DECLARE @Response NVARCHAR(MAX);
DECLARE @Description NVARCHAR(MAX);
-- 1. 获取产品数据
SELECT @ProductData=(SELECT
p.ProductName,
c.CategoryName,
p.Brand,
p.Color,
p.Gender,
p.Season,
p.Price,
p.Currency
FROM dbo.Products p
INNER JOIN dbo.Categories c ON p.CategoryID = c.CategoryID
WHERE p.ProductID =@ProductID
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER);
-- 2. 构建提示词
SET @Prompt='Generate a compelling product description for the following product.
Use a persuasive marketing tone. The description should be ' +@Language+'.
Product details: ' +@ProductData;
-- 3. 构建API请求载荷
SET @Payload= JSON_OBJECT('messages': JSON_ARRAY(
JSON_OBJECT('role': 'user','content': @Prompt)),'max_tokens': 500,'temperature': 0.7);
-- 4. 调用AI模型
EXEC sp_invoke_external_rest_endpoint
@url=@EndpointUrl,
@method='POST',
@headers= JSON_OBJECT('api-key': @ApiKey,'Content-Type': 'application/json'),
@payload=@Payload,
@response=@Response OUTPUT;
-- 5. 从响应中提取描述
SET @Description= JSON_VALUE(@Response,'$.choices[0].message.content');
-- 6. 存储生成的描述
MERGE dbo.ProductDescriptions AS target
USING(VALUES(@ProductID,@Description,@Language)) AS source (ProductID, Description,Language)
ON target.ProductID = source.ProductID AND target.Language= source.Language
WHEN MATCHED THEN UPDATE SET Description = source.Description, GeneratedDate = GETDATE()
WHEN NOT MATCHED THEN INSERT(ProductID, Description,Language)
VALUES(source.ProductID, source.Description, source.Language);
-- 7. 返回结果
SELECT @Description AS GeneratedDescription;
END;
步骤3:执行调用
sql
-- 为产品ID=2354生成英文描述
EXEC dbo.GenerateProductDescription
@ProductID=2354,
@ApiKey='your-openai-api-key',
@EndpointUrl='https://your-resource.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-15-preview',
@Language='English';
-- 生成中文描述
EXEC dbo.GenerateProductDescription
@ProductID=2354,
@ApiKey='your-openai-api-key',
@EndpointUrl='https://your-resource.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-15-preview',
@Language='Chinese';
示例输出(针对紫红色泳裤产品):
"Make a bold splash this summer with these vibrant magenta swim shorts from River Island. Designed for the modern man, they combine style and comfort, ensuring you stand out at the beach or poolside. Don't just swim—make a statement. Grab yours now and own the summer vibe!"
3.4 与NVIDIA NIM集成
NVIDIA NIM提供了GPU加速的AI模型推理服务,SQL Server 2025可直接调用:
sql
-- 注册NVIDIA NIM端点
CREATE EXTERNAL MODEL NemotronEmbed
WITH(
MODEL_TYPE ='OPENAI',
-- NIM兼容OpenAI API
ENDPOINT ='http://nim-container:8000/v1/embeddings',
API_KEY ='not-required-for-local');
-- 使用NIM生成嵌入
DECLARE @embedding VECTOR(1024, float32);
EXEC dbo.AI_GENERATE_EMBEDDINGS
@model='NemotronEmbed',
@text='Product description here',
@embedding=@embedding OUTPUT;
【第四部分】本地AI模型:Ollama集成与数据隐私
4.1 为什么选择本地模型
对于处理敏感数据的企业,将数据发送到云端AI服务可能存在合规风险。SQL Server 2025支持通过Ollama集成本地AI模型,实现完全离线、数据不离开网络边界的AI能力。
本地模型 vs 云端模型对比:
| 数据完全不离开本地 | ||
| 完全离线可用 | ||
| 满足严格合规要求 |
4.2 Ollama安装与配置
Ollama是一个开源的本地模型运行工具,支持Llama 3、Mistral、Phi-3、Gemma等主流模型。
Windows安装步骤:
powershell
# 1. 下载Ollama Windows安装程序
# 访问 https://ollama.com/download/windows
# 2. 运行OllamaSetup.exe完成安装
# 3. 验证安装ollama --version
# 4. 下载模型(首次需要联网,之后可离线)
ollama pull llama3.2:3b
# 轻量模型,适合CPU运行
ollama pull mistral:7b
# 平衡性能和准确性
ollama pull phi3:mini
# 微软小模型,效率高
# 5. 运行模型
ollama run llama3.2:3b
Linux/Ubuntu部署(推荐生产环境):
bash
# 使用Docker部署Ollama(推荐)
docker run -d--gpus all \
-v ollama:/root/.ollama \
-p11434:11434 \
--name ollama \
ollama/ollama
# 拉取模型
docker exec-it ollama ollama pull llama3.2:3b
# 验证API
curl http://localhost:11434/api/generate -d'{ "model": "llama3.2:3b", "prompt": "Hello"}'
4.3 SQL Server调用Ollama
sql
-- 创建调用Ollama的存储过程
CREATE OR ALTER PROCEDURE dbo.CallLocalLLM
@Prompt NVARCHAR(MAX),
@Response NVARCHAR(MAX) OUTPUT
AS
BEGIN
DECLARE @Payload NVARCHAR(MAX);
DECLARE @Url NVARCHAR(500)='http://localhost:11434/api/generate';
SET @Payload= JSON_OBJECT('model': 'llama3.2:3b','prompt': @Prompt,'stream': 'false');
EXEC sp_invoke_external_rest_endpoint@url=@Url,@method='POST',@payload=@Payload,@response=@Response OUTPUT;
-- 提取响应内容
SET @Response= JSON_VALUE(@Response,'$.response');
END;
4.4 本地模型+RAG:私有数据分析
一个强大的应用场景是将本地模型与SQL Server中的专有数据结合,构建私有的RAG应用:

实现思路:
使用嵌入模型将业务数据向量化,存储在SQL Server中
用户提问时,将问题转为向量,搜索最相关的数据
将相关数据作为上下文,调用本地LLM生成回答
整个过程不离开企业网络边界,确保数据安全
【第五部分】RAG应用构建实战
5.1 RAG架构概述
检索增强生成(RAG)是目前企业AI应用的主流架构。SQL Server 2025的向量能力使其成为RAG应用的理想数据平台。

5.2 完整示例:T-SQL助手
这是一个基于SQL Server 2025向量功能构建的T-SQL脚本助手示例:
步骤1:创建脚本表和向量存储
sql
-- 创建脚本存储表
CREATE TABLE dbo.TSQLScripts (
ScriptID INT IDENTITY PRIMARY KEY,
ScriptPath NVARCHAR(500),
ScriptName NVARCHAR(200),
ScriptContent NVARCHAR(MAX),
ChunkNumber INT,
ChunkContent NVARCHAR(MAX),
Embedding VECTOR(1024, float32)
-- 1024维向量
);
-- 创建向量索引(百万级数据时使用)
CREATE VECTOR INDEX IX_TSQLScripts_Embedding
ON dbo.TSQLScripts (Embedding)
WITH(metric ='cosine',type='diskANN', dimensions =1024);
步骤2:生成并存储嵌入
python
# Python脚本:使用SentenceTransformers生成嵌入并存入SQL Server
from sentence_transformers
import SentenceTransformer
import pymssql
# 加载嵌入模型
model = SentenceTransformer('mixedbread-ai/mxbai-embed-large-v1')
# 连接SQL Server
conn = pymssql.connect(server='localhost', database='AIWorkshop')cursor = conn.cursor()
# 读取脚本内容并生成嵌入
cursor.execute("SELECT ScriptID, ChunkContent FROM dbo.TSQLScripts WHERE Embedding IS NULL")
rows = cursor.fetchall()
for script_id, content in rows:
embedding = model.encode(content).tolist()
embedding_str ='['+','.join(map(str, embedding))+']'
cursor.execute("UPDATE dbo.TSQLScripts SET Embedding = %s WHERE ScriptID = %d",(embedding_str, script_id))
conn.commit()
步骤3:相似度搜索存储过程
sql
CREATE OR ALTER PROCEDURE dbo.SearchTSQLScripts @UserQuestion NVARCHAR(500),@TopN INT=5ASBEGIN
-- 注意:嵌入生成在应用层完成,此处接收已生成的向量
-- 实际实现中,可以在SQL中调用AI_GENERATE_EMBEDDINGS(需预览功能)
DECLARE @QuestionEmbedding VECTOR(1024, float32)= @UserQuestionEmbedding;
SELECT TOP(@TopN)
ScriptName,
ChunkContent,
VECTOR_DISTANCE('cosine', Embedding,@QuestionEmbedding) AS SimilarityScore
FROM dbo.TSQLScripts
ORDER BY SimilarityScore;
END;
5.3 与LangChain集成
SQL Server 2025与LangChain等AI开发框架深度集成:
python
from langchain.vectorstores
import SQLServerVectorStore
from langchain.embeddings
import OpenAIEmbeddings
# 使用SQL Server作为向量存储
vector_store = SQLServerVectorStore(
connection_string="mssql+pyodbc://...",
table_name="ProductEmbeddings",
embedding_function=OpenAIEmbeddings(),
vector_dimensions=1536)
# 相似度搜索
results = vector_store.similarity_search_with_score("comfortable running shoes for marathon", k=5)
【第六部分】嵌入生成与文本分块
6.1 AI_GENERATE_EMBEDDINGS
SQL Server 2025预览版提供了原生嵌入生成功能:
sql
-- 使用AI_GENERATE_EMBEDDINGS生成嵌入(需预览功能)
DECLARE@embedding VECTOR(1536, float32);
EXEC dbo.AI_GENERATE_EMBEDDINGS @model='azure-openai-embedding',@text='SQL Server 2025 AI features',@embedding=@embedding OUTPUT;
6.2 AI_GENERATE_CHUNKS
对于长文档,需要先进行文本分块:
sql
-- 文本分块示例
DECLARE @chunks TABLE(ChunkNumber INT, ChunkContent NVARCHAR(MAX));
INSERT INTO @chunks
EXEC dbo.AI_GENERATE_CHUNKS @text=@LongDocument,@chunk_size=1000,
-- 字符数
@overlap=200;
-- 重叠字符数
-- 为每个分块生成嵌入并存储【第七部分】AI集成的安全与治理
7.1 企业级安全考量
SQL Server 2025在提供AI能力的同时,也注重安全性:
| 数据隐私 | ||
| 访问控制 | ||
| 加密通信 | ||
| 审计 | ||
| 模型治理 |
7.2 最小权限配置
sql
-- 创建专用角色,限制AI功能访问
CREATE ROLE AIExecutor;
-- 授予调用外部端点的权限
GRANT EXECUTE ON dbo.GenerateProductDescription TO AIExecutor;
GRANT EXECUTE ON dbo.CallLocalLLM TO AIExecutor;
-- 禁止直接调用sp_invoke_external_rest_endpoint
DENY EXECUTE ON sys.sp_invoke_external_rest_endpoint TO public;
【第八部分】本章小结
核心知识点速查
VECTOR(n, float32) | |||
VECTOR_DISTANCE('cosine', v1, v2) | |||
CREATE VECTOR INDEX | |||
EXEC sp_invoke_external_rest_endpoint | |||
CREATE EXTERNAL MODEL | |||
EXEC AI_GENERATE_EMBEDDINGS | |||
EXEC AI_GENERATE_CHUNKS | |||
sp_invoke_external_rest_endpoint |
AI功能选型决策树

最佳实践清单
预览功能:生产环境等待正式版,测试环境可提前验证
嵌入模型选择:根据语言和精度需求选择(OpenAI 1536维,本地模型1024维)
向量索引:百万级以上数据使用DiskANN,小数据集可直接计算
混合搜索:结合传统过滤和向量搜索,提高相关性
本地模型:敏感数据场景优先考虑Ollama + 本地LLM
安全审计:记录所有AI模型调用,满足合规要求
成本优化:本地模型无API调用费,适合高频场景
【下期预告】
第11期:安全与治理——Microsoft Entra、数据保护、合规
我们将深入:
Microsoft Entra ID集成与托管身份
透明数据加密(TDE)增强
行级安全(RLS)与动态数据脱敏
SQL Server审计与合规报告
AI应用的安全治理框架
*本文为学习笔记,内容基于《SQL Server 2025 Unveiled:The Enterprise AI-Ready Database with Microsoft Fabric Integration》第7、8章及相关技术社区资料(dbi services、NVIDIA开发者博客、SQL Authority、Argon Systems、SQLBits 2026等)提炼总结,作者Bob Ward,Apress出版,2026年。*




