快速入门:使用业务逻辑解释器(预览版)

在本快速入门中,你将了解业务逻辑解释器如何帮助开发人员了解和使用在 SQL、ORM(Object-Relational 映射)框架中实现的复杂应用程序逻辑,或直接在数据库中实现。 助手分析 SQL 代码、ORM 模型或现有数据库架构,以解释基础业务规则并提供可作的文档。

开始吧

确保已连接到数据库,并使用 MSSQL 扩展打开活动编辑器窗口。 通过此连接, @mssql 聊天参与者可以了解数据库环境的上下文,从而提供准确的上下文感知建议。 如果没有数据库连接,聊天参与者将没有架构或数据上下文来提供有意义的响应。

以下示例使用 AdventureWorksLT2022 示例数据库,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。

为了获得最佳结果,请调整表和架构名称以匹配自己的环境。

确保聊天包含 @mssql 前缀。 例如,键入 @mssql 后跟问题或提示。 这可确保聊天参与者了解你请求与 SQL 相关的帮助。

使用 GitHub Copilot 了解业务逻辑

GitHub Copilot 可以帮助你了解和解释嵌入在数据库代码、ORM 模型和应用程序查询中的业务规则。 从存储过程到 LINQ 查询和 Sequelize 表达式,GitHub Copilot 提供自然语言见解,使复杂的逻辑更易于访问。

下面是通过聊天参与者可以询问的常见用例和示例:

解释 T-SQL 逻辑

使用 GitHub Copilot 了解和解释 T-SQL 逻辑,从存储过程到内联条件语句。 无论是查看折扣规则、过程逻辑还是优化条件,GitHub Copilot 都可以分析和记录 T-SQL 中实现的业务规则。

  • 解释SalesLT.uspGetCustomerOrderHistory存储过程的作用,并建议优化该存储过程的方法。
  • 调试SalesLT.uspGetTopSellingProducts存储过程并提出改进建议。
  • 分析当前数据库中的以下 SQL 代码片段。 记录此折扣应用程序过程中实施的业务规则,包括资格条件、折扣率调整以及对折扣金额施加的任何限制。 此外,请提供可作的见解或建议,以在必要时提高清晰度或性能。
DECLARE @OrderTotal AS DECIMAL (10, 2) = 1500.00;
DECLARE @DiscountCode AS NVARCHAR (20) = 'DISCOUNT10';
DECLARE @DiscountPct AS DECIMAL (5, 2) = CASE WHEN @OrderTotal > 1000.00 THEN 5.0 ELSE 0.0 END;

IF @DiscountCode = 'DISCOUNT10'
    BEGIN
        SET @DiscountPct = CASE WHEN @DiscountPct < 10.0 THEN 10.0 ELSE @DiscountPct END;
    END

DECLARE @DiscountAmount AS DECIMAL (10, 2) = (@OrderTotal * @DiscountPct / 100.0);

IF @DiscountAmount > 200.00
    BEGIN
        SET @DiscountAmount = 200.00;
    END

SELECT @OrderTotal AS OrderTotal,
       @DiscountPct AS DiscountPercentage,
       @DiscountAmount AS DiscountAmount;

解释 ORM 逻辑

  • 解释以下 SQLAlchemy 查询的作用:
from sqlalchemy import func

top_customers = (
    session.query(SalesOrderHeader.CustomerID, func.count().label("OrderCount"))
    .group_by(SalesOrderHeader.CustomerID)
    .order_by(func.count().desc())
    .limit(10)
)
  • 此 Entity Framework LINQ 查询的作用是什么? 描述它如何根据客户的总购买量按层对客户进行分组。
var customerTiers = context.SalesOrderHeaders
    .GroupBy(o => o.CustomerID)
    .Select(g => new {
        CustomerID = g.Key,
        TotalSpent = g.Sum(o => o.TotalDue),
        Tier = g.Sum(o => o.TotalDue) >= 10000 ? "Gold" :
               g.Sum(o => o.TotalDue) >= 5000 ? "Silver" : "Bronze"
    });
  • 分析此 Prisma 查询的逻辑,并说明它如何确定哪些产品被视为“低库存”。
const lowInventoryProducts = await prisma.product.findMany({
  where: {
    SafetyStockLevel: {
      lt: 50
    }
  },
  select: {
    ProductID: true,
    Name: true,
    SafetyStockLevel: true
  }
});
  • 查看并解释此 Sequelize 查询的作用。 添加内联注释,以阐明它如何计算每个客户的总收入,并筛选具有大量支出的客户:
const results = await SalesOrderHeader.findAll({
  attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
  group: ['CustomerID'],
  having: sequelize.literal('SUM(TotalDue) > 5000')
});
  • 使用 SQLAlchemy 生成查询来列出从未订购过的产品,并要求 GitHub Copilot 解释联接逻辑和筛选行为。

  • 在 Prisma 中,编写一个查询,用于检索在过去 30 天内下订单的客户。 解释以下 Prisma 查询的作用。 添加内联注释以阐明日期筛选的工作原理以及确定最近订单的方式:

通过查询了解业务意向

GitHub Copilot 帮助开发人员不仅了解查询的工作原理,还有助于开发人员了解查询存在的原因。 这包括数据筛选器、分组和聚合背后的实际用途。 这些解释在载入期间特别有用,使开发人员能够掌握 SQL 和 ORM 代码中嵌入的报表、逻辑门或系统指标背后的目标。

  • 描述以下 SQL 查询的业务目标。 它尝试呈现什么见解?
SELECT TOP 10 CustomerID,
              COUNT(*) AS OrderCount
FROM SalesLT.SalesOrderHeader
GROUP BY CustomerID
ORDER BY OrderCount DESC;
  • 总结此查询旨在从业务角度实现的内容。
SELECT ProductID,
       SUM(LineTotal) AS TotalSales
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > 10000;
  • SalesLT.uspGetCustomerOrderHistory分析存储过程并描述它实现的业务逻辑。

  • 介绍此 Entity Framework LINQ 查询并描述它实现的业务逻辑:

var highValueCustomers = context.SalesOrderHeaders
    .Where(o => o.TotalDue > 1000)
    .GroupBy(o => o.CustomerID)
    .Select(g => new { CustomerID = g.Key, OrderCount = g.Count() })
    .OrderByDescending(x => x.OrderCount)
    .Take(10)
    .ToList();
  • 使用 Sequelize,解释此查询的作用,并描述它所做的任何业务假设:
const customerRevenue = await SalesOrderHeader.findAll({
  attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
  group: ['CustomerID'],
  having: sequelize.literal('SUM(TotalDue) > 5000')
});

反馈:业务逻辑解释器

为了帮助我们优化和改进 MSSQL 扩展的 GitHub Copilot,请使用以下 GitHub 问题模板提交反馈: GitHub Copilot 反馈

提交反馈时,请考虑包括:

  • 测试方案 – 告诉我们你关注哪些领域,例如架构创建、查询生成、安全性、本地化。

  • 效果良好 - 描述任何感觉流畅、有用或超出预期的体验。

  • 问题或漏洞 – 包括任何问题、不一致或令人困惑的行为。 屏幕截图或屏幕录制特别有用。

  • 改进建议 - 分享改进可用性、扩大覆盖范围或增强 GitHub Copilot 响应的想法。