mcpField
S
sql-server-2025

sql-server-2025

github.com/josiahsiegel数据与数据库59256 次安装19 周前更新
代码仓库

关于 sql-server-2025

面向 SQL Server 数据库开发和运维人员,汇总 SQL Server 2025、SqlPackage 与数据库项目的功能和部署实践。内容涉及版本状态、数据类型、发布、测试及 CI/CD。

主要功能

  1. 01SQL Server 2025 功能与版本信息
  2. 02SqlPackage 发布和诊断命令
  3. 03VECTOR 与 JSON 数据类型
  4. 04数据库项目与 ScriptDom 支持
  5. 05CI/CD 测试和部署建议
  6. 06Fabric 数据仓库部署示例

适用场景

  1. 01评估 SQL Server 2025 升级与功能
  2. 02使用 SqlPackage 发布数据库项目
  3. 03为数据库部署设计 CI/CD 流程
  4. 04解析 SQL Server 2025 语法

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill sql-server-2025

安装后在 Claude Code 中输入/sql-server-2025确认已加载。

附带文件references/sql-server-2025-features.md

详细介绍

🚨 关键指南

Windows 文件路径要求

强制要求:在 Windows 上始终使用反斜杠表示文件路径

在 Windows 上使用 Edit 或 Write 工具时,文件路径必须使用反斜杠(\),而不是正斜杠(/)。

示例:

  • ❌ 错误:D:/repos/project/file.tsx
  • ✅ 正确:D:\repos\project\file.tsx

适用于:

  • Edit 工具的 file_path 参数
  • Write 工具的 file_path 参数
  • Windows 系统上的所有文件操作
文档指南

除非用户明确要求,否则绝不创建新的文档文件。

  • 优先事项:更新现有的 README.md 文件,而不是创建新的文档
  • 保持仓库整洁:保持仓库根目录整洁——除非用户另有要求,否则只保留 README.md
  • 风格:文档应简洁、直接且专业,避免使用 AI 生成式语气
  • 用户偏好:只有用户明确要求提供文档时,才创建额外的 .md 文件

SQL Server 2025 和 SqlPackage 170.2.70 支持

概述

SQL Server 2025 是一款面向企业且为 AI 做好准备的数据库,具备原生向量数据库功能、内置 AI 模型集成,以及从本地到云端的语义搜索能力。

SqlPackage 170.2.70(2025 年 10 月 14 日)——最新的正式版,全面支持 SQL Server 2025、数据虚拟化和 Parquet 文件增强功能。

SqlPackage 170.x 系列(2025 年发布)

最新版本:170.2.70(2025 年 10 月 14 日)

2025 年发布的三个主要版本:

  • 170.2.70 - 2025 年 10 月 14 日(当前版本)
  • 170.1.61 - 2025 年 7 月 30 日(数据虚拟化)
  • 170.0.94 - 2025 年 4 月 15 日(初步支持 SQL Server 2025)
2025 年主要功能

数据虚拟化(170.1.61+):

  • 支持 Azure SQL Database 数据虚拟化对象
  • 支持对外部数据源执行导入、导出、提取和发布操作
  • 支持 Azure SQL Database 使用 Azure Blob Storage 中的 Parquet 文件
  • 对 CLR 类型和大于 1 MB 的 LOB 自动回退到 BCP

新数据类型:

  • VECTOR - 最多支持 3,996 个维度,使用半精度(2 字节)浮点数
  • JSON - Azure SQL Database 的原生 JSON 数据类型

新增权限(170.0+):

  • ALTER ANY INFORMATION PROTECTION - SQL Server 2025 和 Azure SQL
  • ALTER ANY EXTERNAL MIRROR - Azure SQL 和 Fabric 中的 SQL database
  • CREATE/ALTER ANY EXTERNAL MODEL - AI/ML 模型管理

部署选项:

  • /p:IgnorePreDeployScript=True/False - 跳过预部署脚本
  • /p:IgnorePostDeployScript=True/False - 跳过部署后脚本
SqlPackage 命令
# Publish to SQL Server 2025
sqlpackage /Action:Publish \
  /SourceFile:Database.dacpac \
  /TargetServerName:server2025.database.windows.net \
  /TargetDatabaseName:MyDatabase \
  /TargetDatabaseEdition:Premium \
  /p:TargetPlatform=SqlServer2025  # New target platform

# Extract from SQL Server 2025
sqlpackage /Action:Extract \
  /SourceServerName:server2025.database.windows.net \
  /SourceDatabaseName:MyDatabase \
  /TargetFile:Database.dacpac \
  /p:ExtractAllTableData=False \
  /p:VerifyExtraction=True

# Export with SQL Server 2025 features
sqlpackage /Action:Export \
  /SourceServerName:server2025.database.windows.net \
  /SourceDatabaseName:MyDatabase \
  /TargetFile:Database.bacpac

ScriptDom 版本 170.0.64

用于解析 SQL Server 2025 语法的新版 ScriptDom:

// Package: Microsoft.SqlServer.TransactSql.ScriptDom 170.0.64

using Microsoft.SqlServer.TransactSql.ScriptDom;

// Parse SQL Server 2025 syntax
var parser = new TSql170Parser(true);
IList<ParseError> errors;
var fragment = parser.Parse(new StringReader(sql), out errors);

// Supports SQL Server 2025 new T-SQL features

Microsoft.Build.Sql 2.0.0 GA(2025)

**重大里程碑:**Microsoft.Build.Sql SDK 于 2025 年正式达到通用可用(GA)状态!

最新版本:2.0.0(可用于生产环境)

相较于预览版的重大变更:

  • SDK 现已可用于生产环境,建议所有新的数据库项目使用
  • 不再处于预览状态
  • 全面支持跨平台(Windows/Linux/macOS)
  • 需要 .NET 8+(预览版需要 .NET 6+)
SQL Server 2025 支持

**当前状态:**Microsoft.Build.Sql 后续版本(2.0.0 之后)将支持 SQL Server 2025 目标平台。

SDK 风格项目的变通方案:


<Project Sdk="Microsoft.Build.Sql/2.0.0">
  <PropertyGroup>
    <Name>MyDatabase</Name>
    
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <TargetFramework>net8.0</TargetFramework>
    <SqlServerVersion>Sql160</SqlServerVersion>

    
    
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="Tables\" />
    <Folder Include="Views\" />
    <Folder Include="StoredProcedures\" />
  </ItemGroup>
</Project>
Visual Studio 2022 支持

**要求:**SDK 风格的 SQL 项目需要 Visual Studio 2022 17.12 或更高版本。

**注意:**不支持与原有 SQL 项目(旧版 SSDT)并行安装。

SQL Server 2025 发布状态

当前状态:截至 2025 年 10 月,SQL Server 2025(17.x)处于**候选发布版(RC1)**阶段。公开预览于 2025 年 5 月开始。

预计正式发布(GA)日期:2025 年 11 月 12 日(根据以往的发布规律推测:SQL Server 2019 于 11 月 4 日发布,SQL Server 2022 于 11 月 16 日发布)。预计将在 Microsoft Ignite 大会上(2025 年 11 月 18 日至 21 日)公布。

尚未用于生产环境:SQL Server 2025 尚未正式发布。目前描述的所有功能仅在 RC 版本中提供,用于测试。

SQL Server 2025 新功能

引擎功能完整目录:原生向量数据库(适用于 AI / RAG 工作负载的 DiskANN 索引)、JSON 增强功能、正则表达式、模糊搜索、更改事件流、安全性和敏感度分类、性能 / 智能查询处理新增功能、T-SQL 改进以及 Always Encrypted 更新,详见 references/sql-server-2025-features.md。规划 2025 升级,或在 SSDT 项目中采用上述任一引擎功能时,请加载该参考文件。

部署到 SQL Server 2025

使用 SqlPackage
# Publish with 2025 features
sqlpackage /Action:Publish \
  /SourceFile:Database.dacpac \
  /TargetConnectionString:"Server=tcp:server2025.database.windows.net;Database=MyDb;Authentication=ActiveDirectoryManagedIdentity;" \
  /p:BlockOnPossibleDataLoss=True \
  /p:IncludeCompositeObjects=True \
  /p:DropObjectsNotInSource=False \
  /p:DoNotDropObjectTypes=Users;RoleMembership \
  /p:GenerateSmartDefaults=True \
  /DiagnosticsFile:deploy.log
使用 MSBuild

<Project>
  <PropertyGroup>
    <TargetConnectionString>Server=tcp:server2025.database.windows.net;Database=MyDb;Authentication=ActiveDirectoryManagedIdentity;</TargetConnectionString>
    <BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
    <TargetDatabaseName>MyDatabase</TargetDatabaseName>
    <ProfileVersionNumber>1</ProfileVersionNumber>
  </PropertyGroup>

  <ItemGroup>
    <SqlCmdVariable Include="Environment">
      <Value>Production</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>
# Deploy using MSBuild
msbuild Database.sqlproj \
  /t:Publish \
  /p:PublishProfile=Database.publish.xml \
  /p:TargetPlatform=SqlServer2025

2025 年 CI/CD 最佳实践

核心原则

基于状态的部署(推荐):

  • 源代码表示数据库的当前状态
  • 所有对象(存储过程、表、触发器、视图)均放在单独的 .sql 文件中
  • SqlPackage 自动生成增量脚本
  • 优先于基于迁移的方法

测试与质量:

  • tSQLt - 用于测试 SQL Server 存储过程和函数的单元测试框架
  • 测试生成机器可读的结果
  • 测试失败时中止流水线并立即发送通知
  • 测试失败时绝不继续部署

安全性:

  • CI/CD 优先使用 Windows 身份验证(避免使用明文密码)
  • 切勿将凭据提交到源代码管理
  • 使用 Azure Key Vault 或 GitHub Secrets 存储连接字符串

版本控制:

  • 在源代码管理中保存所有数据库对象
  • 对测试脚本进行版本控制,并在 Build 步骤中执行
  • 要求提交时附带注释
  • 配置自定义提交策略
GitHub Actions(2025 模式)
name: Deploy to SQL Server 2025

on:
  push:
    branches: [main]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: Setup .NET 8
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.0.x'

    - name: Install SqlPackage 170.2.70
      run: dotnet tool install -g Microsoft.SqlPackage --version 170.2.70

    - name: Build DACPAC
      run: dotnet build Database.sqlproj -c Release

    - name: Run tSQLt Unit Tests
      run: |
        # Run unit tests and capture results
        # Abort if tests fail
        echo "Running tSQLt unit tests..."
        # Add your tSQLt test execution here

    - name: Generate Deployment Report
      run: |
        sqlpackage /Action:DeployReport \
          /SourceFile:bin/Release/Database.dacpac \
          /TargetConnectionString:"${{ secrets.SQL_CONNECTION_STRING }}" \
          /OutputPath:deploy-report.xml \
          /p:BlockOnPossibleDataLoss=True

    - name: Publish to SQL Server 2025
      run: |
        sqlpackage /Action:Publish \
          /SourceFile:bin/Release/Database.dacpac \
          /TargetConnectionString:"${{ secrets.SQL_CONNECTION_STRING }}" \
          /p:TargetPlatform=SqlServer2025 \
          /p:BlockOnPossibleDataLoss=True \
          /DiagnosticsFile:publish.log \
          /DiagnosticsLevel:Verbose

    - name: Upload Artifacts
      if: always()
      uses: actions/upload-artifact@v4
      with:
        name: deployment-logs
        path: |
          publish.log
          deploy-report.xml
Azure DevOps
trigger:
- main

pool:
  vmImage: 'windows-2022'

steps:
- task: MSBuild@1
  displayName: 'Build Database Project'
  inputs:
    solution: 'Database.sqlproj'
    configuration: 'Release'

- task: SqlAzureDacpacDeployment@1
  displayName: 'Deploy to SQL Server 2025'
  inputs:
    azureSubscription: 'Azure Subscription'
    authenticationType: 'servicePrincipal'
    serverName: 'server2025.database.windows.net'
    databaseName: 'MyDatabase'
    deployType: 'DacpacTask'
    deploymentAction: 'Publish'
    dacpacFile: '$(Build.SourcesDirectory)/bin/Release/Database.dacpac'
    additionalArguments: '/p:TargetPlatform=SqlServer2025'

SqlPackage 新增诊断功能

# Enable detailed diagnostics
sqlpackage /Action:Publish \
  /SourceFile:Database.dacpac \
  /TargetServerName:server2025.database.windows.net \
  /TargetDatabaseName:MyDatabase \
  /DiagnosticsLevel:Verbose \
  /DiagnosticPackageFile:diagnostics.zip

# Creates diagnostics.zip containing:
# - Deployment logs
# - Performance metrics
# - Error details
# - Schema comparison results

Microsoft Fabric 数据仓库支持

**SqlPackage 162.5+ 新增:**全面支持 Microsoft Fabric 中的 SQL 数据库。

Fabric 部署:

# Deploy to Fabric Warehouse
sqlpackage /Action:Publish \
  /SourceFile:Warehouse.dacpac \
  /TargetConnectionString:"Server=tcp:myworkspace.datawarehouse.fabric.microsoft.com;Database=mywarehouse;Authentication=ActiveDirectoryInteractive;" \
  /p:DatabaseEdition=Fabric \
  /p:DatabaseServiceObjective=SqlDbFabricDatabaseSchemaProvider

# Extract from Fabric
sqlpackage /Action:Extract \
  /SourceConnectionString:"Server=tcp:myworkspace.datawarehouse.fabric.microsoft.com;Database=mywarehouse;Authentication=ActiveDirectoryInteractive;" \
  /TargetFile:Fabric.dacpac

# New permission: ALTER ANY EXTERNAL MIRROR (Fabric-specific)
GRANT ALTER ANY EXTERNAL MIRROR TO [FabricAdmin];

SQL Server 2025 最佳实践

  1. 使用目标平台规范:
<PropertyGroup>
  <TargetPlatform>SqlServer2025</TargetPlatform>
</PropertyGroup>
  1. 测试向量操作:
-- Verify vector support
SELECT SERVERPROPERTY('IsVectorSupported') AS VectorSupport;
  1. 监控 AI 模型性能:
-- Track model execution
SELECT
    model_name,
    AVG(execution_time_ms) AS AvgExecutionTime,
    COUNT(*) AS ExecutionCount
FROM sys.dm_exec_external_model_stats
GROUP BY model_name;
  1. 实施敏感度分类:
-- Classify all PII columns
ADD SENSITIVITY CLASSIFICATION TO dbo.Customers.Email
WITH (LABEL = 'Confidential - GDPR', INFORMATION_TYPE = 'Email');

资源

评论

支持 Markdown