在 SQL Server Management Studio 中使用 Copilot
SQL Server Management Studio (SSMS) 支持两个 AI 支持的编码助手,可帮助你编写、优化 和排查 T-SQL 代码问题。 GitHub Copilot 提供跨多种语言的常规编码帮助,而 Copilot 提供特定于连接的 SQL Server 实例的数据库感知建议。
这两种工具都使用大型语言模型来加速数据库开发。 GitHub Copilot 在整个代码库中的代码补全和模式识别方面表现出色,它利用数据库架构、索引及统计信息,提供上下文敏感的 T-SQL 帮助。
这些 AI 助手使数据库开发更易于访问,并提高新开发人员和经验丰富的开发人员的工作效率。 无论是编写查询、调试代码还是优化性能,AI 提供支持的帮助都有助于专注于解决业务问题,而不是记住语法。
在 SSMS 中使用 GitHub Copilot
SSMS 中的 GitHub Copilot 为数据库开发工作流带来了 AI 提供支持的代码完成和生成。 作为一个通用编码助手,GitHub Copilot 通过在你键入时建议代码,并根据自然语言注释生成完整查询,帮助你更快地编写 T-SQL。
了解 GitHub Copilot 功能
GitHub Copilot 为 SQL Server 开发提供了多项功能:
- 内联代码完成功能: 编写 T-SQL 代码时提供实时建议
- 自然语言转代码: 编写描述意图的注释,生成有效查询
- 多行建议: 生成整个查询块、过程或函数
- 模式识别: 了解工作区中的编码样式和常见模式
- 上下文感知:会考虑你已在当前文件中编写的代码
- 多语言支持: 与数据库项目中使用的 T-SQL、PowerShell、Python 和其他语言配合使用
GitHub Copilot 分析当前文件、打开的标签页和工作区,以便提供相关建议。 虽然它不直接连接到数据库,但它可识别 T-SQL 语法模式和常见的数据库开发做法。
在 SSMS 中启用 GitHub Copilot
若要在 SQL Server Management Studio 中使用 GitHub Copilot,请执行以下作:
- 确保已安装 SSMS 19.3 或更高版本
- 从“扩展”菜单安装 GitHub Copilot 扩展
- 使用您的具有活动 GitHub Copilot 订阅 的 GitHub 帐户登录
- 在工具>选项 > GitHub Copilot 中配置首选项
注释
GitHub Copilot 需要付费订阅(个人、企业或企业版)。 某些组织为开发人员提供 GitHub Copilot 作为开发工具许可证的一部分。
使用内联建议编写代码
键入时,GitHub Copilot 会提供建议:
-- Start typing a query
SELECT c.CustomerName,
-- Copilot suggests: c.Email, c.Phone, c.City
-- Press Tab to accept
-- Or write a comment describing what you need:
-- Get total sales by product category for last quarter
-- Copilot generates:
SELECT
p.Category,
SUM(od.Quantity * od.UnitPrice) AS TotalSales
FROM Products p
INNER JOIN OrderDetails od ON p.ProductID = od.ProductID
INNER JOIN Orders o ON od.OrderID = o.OrderID
WHERE o.OrderDate >= DATEADD(QUARTER, -1, GETDATE())
GROUP BY p.Category
ORDER BY TotalSales DESC;
灰色虚影文本显示科皮洛特的建议。 按 Tab 键接受建议,或按 Esc 键取消建议。
生成存储过程和函数
描述注释中的复杂数据库对象:
-- Create a stored procedure to calculate customer lifetime value
-- Parameters: @CustomerID int
-- Returns: @TotalValue money, @OrderCount int, @FirstOrderDate date, @LastOrderDate date
-- GitHub Copilot generates:
CREATE PROCEDURE sp_GetCustomerLifetimeValue
@CustomerID INT
AS
BEGIN
SELECT
@CustomerID AS CustomerID,
SUM(od.Quantity * od.UnitPrice) AS TotalValue,
COUNT(DISTINCT o.OrderID) AS OrderCount,
MIN(o.OrderDate) AS FirstOrderDate,
MAX(o.OrderDate) AS LastOrderDate
FROM Orders o
INNER JOIN OrderDetails od ON o.OrderID = od.OrderID
WHERE o.CustomerID = @CustomerID
GROUP BY o.CustomerID;
END;
GitHub Copilot 了解过程模式并生成完整的可执行代码。
浏览数据库架构
GitHub Copilot 可帮助编写查询来浏览数据库结构:
-- Show all foreign key relationships for Orders table
-- Copilot suggests:
SELECT
fk.name AS ForeignKeyName,
OBJECT_NAME(fk.parent_object_id) AS TableName,
COL_NAME(fkc.parent_object_id, fkc.parent_column_id) AS ColumnName,
OBJECT_NAME(fk.referenced_object_id) AS ReferencedTable,
COL_NAME(fkc.referenced_object_id, fkc.referenced_column_id) AS ReferencedColumn
FROM sys.foreign_keys fk
INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
WHERE OBJECT_NAME(fk.parent_object_id) = 'Orders'
OR OBJECT_NAME(fk.referenced_object_id) = 'Orders';
从你的编码模式中学习
GitHub Copilot 随时间推移适应你的风格。 如果一直使用特定的命名约定、格式或模式,Copilot 会将它们合并到建议中:
-- If you typically write your queries like this:
SELECT
c.CustomerID
,c.CustomerName
,c.Email
FROM Customers AS c
WHERE c.IsActive = 1;
-- Copilot learns your style and suggests:
SELECT
o.OrderID
,o.OrderDate
,o.TotalAmount
FROM Orders AS o
WHERE o.Status = 'Completed';
这种个性化使建议更自然,并减少手动格式设置的需求。
应用 GitHub Copilot 最佳做法
最大化 GitHub Copilot 的有效性:
| 练习 | Description |
|---|---|
| 编写描述性注释 | 明确、具体的注释可生成更好的代码建议 |
| 使用有意义的名称 | 描述性表和列名称可帮助 Copilot 了解上下文 |
| 分解复杂任务 | 为复杂的过程编写多个注释,而不是编写一个大的整体注释块 |
| 查看所有建议 | 始终验证生成的代码以保持正确性和安全性 |
| 提供示例 | 在注释中包含示例数据或预期输出 |
| 保持上下文的邻近 | 打开相关文件或架构,为 Copilot 提供更多上下文 |
| 对建议进行迭代 | 如果第一个建议不太正确,请尝试重新描述你的评论 |
在 SSMS 中使用 Copilot
SSMS 中的 Copilot 提供对数据库有认知的 AI 辅助,可直接连接到 SQL Server 实例。 与 GitHub Copilot 不同,Copilot 可以访问数据库架构、索引、统计信息和元数据,从而实现更上下文准确的 T-SQL 建议。
了解 Copilot 功能
Copilot 提供特定于数据库的功能:
- 模式感知建议: 熟知您表结构、列以及数据类型的细节
- 查询优化: 分析执行计划并建议性能改进
- 自然语言查询: 根据实际数据库将问题转换为 T-SQL
- 解释查询: 用简单语言描述现有查询执行的作用。
- 修复错误: 在查询失败时提供上下文感知建议
- 索引建议: 根据数据库统计信息建议索引
由于 Copilot 连接到数据库,因此它会生成用于特定架构的代码,而无需修改。
使用自然语言进行查询
使用纯英语询问有关数据的问题:
-- Ask Copilot: "Show customers who placed more than 5 orders last month"
-- Copilot generates (using your actual schema):
SELECT
c.CustomerID,
c.CustomerName,
c.Email,
COUNT(o.OrderID) AS OrderCount
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE o.OrderDate >= DATEADD(MONTH, -1, GETDATE())
AND o.OrderDate < DATEADD(DAY, 1, EOMONTH(DATEADD(MONTH, -1, GETDATE())))
GROUP BY c.CustomerID, c.CustomerName, c.Email
HAVING COUNT(o.OrderID) > 5
ORDER BY OrderCount DESC;
Copilot 知道确切的表和列名称,确保查询能立刻生效。
优化查询性能
Copilot 分析查询并建议改进:
-- Select a slow query and ask: "How can I make this faster?"
-- Original query:
SELECT c.CustomerName, SUM(od.Quantity * od.UnitPrice) AS Total
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
LEFT JOIN OrderDetails od ON o.OrderID = od.OrderID
WHERE o.OrderDate >= '2024-01-01'
GROUP BY c.CustomerName;
-- Copilot suggests:
-- 1. Change LEFT JOIN to INNER JOIN (WHERE filters out NULLs anyway)
-- 2. Add covering index: CREATE INDEX IX_Orders_Date ON Orders(OrderDate, CustomerID, OrderID)
-- 3. Consider indexed view for frequent aggregations
-- Optimized query:
SELECT c.CustomerName, SUM(od.Quantity * od.UnitPrice) AS Total
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
INNER JOIN OrderDetails od ON o.OrderID = od.OrderID
WHERE o.OrderDate >= '2024-01-01'
GROUP BY c.CustomerName
OPTION (RECOMPILE);
了解和修复错误
查询失败时,Copilot 会解释问题并提供修复:
-- Query with error:
SELECT CustomerName, SUM(TotalAmount)
FROM Orders;
-- Error: Column 'Orders.CustomerName' is invalid in the select list
-- Ask Copilot: "What's wrong with this query?"
-- Copilot explains and fixes:
/*
The error occurs because CustomerName is not in an aggregate function or GROUP BY clause.
When using aggregate functions like SUM(), all non-aggregated columns must be grouped.
*/
-- Corrected query:
SELECT CustomerName, SUM(TotalAmount) AS Total
FROM Orders
GROUP BY CustomerName;
选择正确的工具
这两种工具都为 SQL Server 开发提供价值:
| 功能 / 特点 | GitHub Copilot | Copilot |
|---|---|---|
| 数据库架构感知 | 否 | 是的 |
| 多语言支持 | 是的 | T-SQL 焦点 |
| 查询优化 | 基于模式 | 特定于数据库 |
| 在 SSMS 之外工作 | 是的 | 否 |
| 需要数据库连接 | 否 | 是的 |
| Subscription | GitHub Copilot | Copilot |
使用 GitHub Copilot 来进行常规的 T-SQL 开发、多语言项目开发,以及整个代码库中的代码完成。 将 Copilot 用于特定于数据库的任务,其中架构感知、查询优化和直接数据库交互可提供更好的结果。
许多开发人员同时使用两者:GitHub Copilot 进行日常编码,在处理特定数据库实例时使用 Copilot。 这些 AI 助手共同加速数据库开发,同时维护代码质量和安全标准。