通过


在 SQL Server Management Studio 中将数据库说明与 GitHub Copilot 配合使用(预览版)

数据库说明为 SQL Server Management Studio(SSMS)中的 GitHub Copilot 提供直接存在于数据库中的数据库特定上下文和指南。 数据库所有者和团队可以使用它们来描述业务规则、数据约定和使用模式。 借助数据库说明,当用户提出问题或编写查询时,Copilot 可以生成更准确、有意义的和一致的响应。 数据库指令作为随数据库旅行且在 Copilot 交互期间自动应用的动态文档。

本文介绍如何使用数据库说明,从而进一步使用户和 Copilot 能够更快地查找正确的对象和信息。 此功能有助于缩短向 Copilot 提供数据库、业务和内部知识所花费的时间。

有关 GitHub Copilot Chat 的相关信息,请参阅使用 SQL Server Management Studio 中的 GitHub Copilot 聊天体验(预览版)。

数据库指令的工作原理

数据库指令作为元数据存储在数据库中,这允许 Copilot 在运行时自动发现并应用它们。 当用户与 GitHub Copilot 进行数据库交互(例如以自然语言提问或生成 T-SQL)时,Copilot 将这些说明合并为额外的上下文。 此上下文可确保响应反映业务定义、规范表和特定于域的规则,而不是仅依赖于架构名称或猜测。 指令会跨会话保留,可供任何访问同一数据库的用户使用。

先决条件

SSMS 中 GitHub Copilot 的数据库说明依赖于扩展属性中的信息。

  1. 请安装带有AI 协助工作负载的 SSMS 22.3 或更高版本。

  2. 使用 Copilot 访问权限登录到 GitHub 帐户。

免费使用 GitHub Copilot。 注册以便使用 AI 更快、更高效地编写代码。

使用 GitHub Copilot 添加或查看数据库说明

这些步骤演示如何使用 GitHub Copilot 创建和使用数据库说明。

向 Copilot 提出一个问题,以揭示丢失的上下文

首先,向 Copilot 询问有关自然语言数据的问题。 例如, What was revenue for the last quarter of the year? 如果业务对会计年度和日历年有不同的开始日期,或者收入需要涉及多个表的计算,则相关表或列非常适合用于数据库说明。

将业务规则定义为数据库指令

在 Copilot 聊天中,描述希望 Copilot 记住的规则或澄清。 例如: Add an instruction for the Finance.CompanyRevenue table to state that revenue is defined as SUM(NetAmount) excluding refunds recorded in Finance.Refunds.

将说明保存到数据库

Copilot 生成 T-SQL 语法以将指令添加为扩展属性后,必须将此信息保留为数据库指令。 在 Ask 模式下,GitHub Copilot 无法对数据库运行修改查询。

-- Created by GitHub Copilot in SSMS - review carefully before executing
EXECUTE sp_addextendedproperty
    @name = N'AGENTS.md',
    @value = N'Revenue is defined as SUM(NetAmount) excluding refunds recorded in Finance.Refunds. When calculating actual revenue, refunds must be subtracted from the Revenue column values.',
    @level0type = N'SCHEMA',
    @level0name = N'Finance',
    @level1type = N'TABLE',
    @level1name = N'CompanyRevenue';

将指令添加到数据库后,Copilot 会自动将信息应用于将来的交互。

将 Copilot 与应用的指令配合使用

再次向 Copilot 询问相同或相关问题, What was revenue for the last quarter of the year? Copilot 现在使用保存的说明生成与业务收入定义一致的结果,而无需重新说明规则。 还可以要求 Copilot Show me the query used to get this information. 确认科皮洛特对指令的理解。

更多示例

在某些情况下,需要为数据库对象应用业务规则,包括表、列和存储过程。

  • The dbo.Apts table stores information about patient appointments
  • The Status column in dbo.Apts encodes status as: 1 = Scheduled, 2 = Completed, 5 = Confirmed, 99 = Cancelled
  • The DtCrtd column in dbo.Apts lists the date and time the appointment was created

在将数据库指令与 Copilot 配合使用时,您还可以询问当前存在的指令。

  • Show me the database instructions for this database
  • Does this database have a constitution set?

使用 GitHub Copilot 创建数据库宪法

SSMS 中的 GitHub Copilot 还支持数据库的单一宪法,该宪法为数据库设置最高优先级指令。 宪法可以包括建议、编码准则、保留策略等。

注释

实现数据库宪法适用于在 SSMS 中使用 GitHub Copilot 的每个用户的 GitHub Copilot 对话。 建议和指南仅适用于 GitHub Copilot 对话。

EXECUTE sp_addextendedproperty
    @name = N'CONSTITUTION.md',
    @value = N'Any T-SQL in this database must comply with the organizational standards and guidelines outlined in this constitution document.
 Queries that use SELECT * should not be used.';

要求

数据库指令目前仅支持作为扩展属性。 它们遵循 AGENTS.md 格式来提供 GitHub Copilot 使用的上下文。 对象的扩展属性的名称必须是 AGENTS.md。 只有一个为对象命名 AGENTS.md 的属性可以存在。 如果某条指令不正确,可以使用 sp_updateextendedproperty 进行更新,也可以使用 sp_dropextendedproperty 将其删除。 数据库指令不需要其他配置。