在本快速入门中,你将了解业务逻辑解释器如何帮助开发人员了解和使用在 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 响应的想法。