Використовуйте GitHub Copilot у SQL Server Management Studio

Завершено

SQL Server Management Studio (SSMS) включає GitHub Copilot — асистента на базі ШІ, який допомагає писати, оптимізувати та вирішувати несправності коду T-SQL . GitHub Copilot забезпечує завершення коду в редакторі запитів під час написання T-SQL, а також надає чат, де можна використовувати природну мову, щоб отримати допомогу з написанням запитів, ставити питання про вашу базу даних чи середовище, а також отримати допомогу з SQL-проблемами. Завжди слід використовувати останню версію SSMS (наразі SSMS 22), оскільки це GA-версія.

GitHub Copilot дозволяє обрати модель, і доступні моделі залежать від вашої підписки. GitHub Copilot пропонує заповнення коду та використовує вашу схему підключення та базу даних для надання контексту моделі та покращення відповідей.

GitHub Copilot робить розробку баз даних більш доступною та підвищує продуктивність як для новачків, так і для досвідчених розробників. Чи пишете ви запити, вирішуєте проблеми з кодом або оптимізуєте продуктивність — GitHub Copilot допомагає зосередитися на вирішенні бізнес-проблем, а не на запам'ятовуванні синтаксису.

Розумійте GitHub Copilot у SQL Server Management Studio

GitHub Copilot у SSMS додає до вашого робочого процесу розробки баз даних завершення, генерацію та чат на основі штучного інтелекту. GitHub Copilot допомагає швидше писати T-SQL, пропонуючи код під час набору, генеруючи цілі запити з коментарів природною мовою та забезпечуючи чат, де можна ставити питання про свою базу даних і отримувати допомогу з SQL-проблемами.

Досліджуйте можливості GitHub Copilot

GitHub Copilot надає кілька функцій для розробки SQL Server:

  • Вбудоване доповнення коду: Пропозиції в режимі реального часу під час написання коду T-SQL
  • Природна мова для кодування: Пишіть коментарі з описом свого наміру, отримуйте робочі запити
  • Багаторядкові пропозиції: Генерація цілих блоків, процедур або функцій запитів
  • Контекст: Розуміє схему бази даних, до якої ви підключені

GitHub Copilot також пропонує такі функції через чат:

  • Пропозиції з урахуванням схеми: Знає точні структури таблиць, стовпці та типи даних
  • Оптимізація запитів: Аналізує запити та пропонує покращення продуктивності
  • Запити на природну мову: Перетворює питання у T-SQL на основі бази даних, до якої ви підключені
  • Поясніть запитання: Описує, що роблять існуючі запити простою мовою
  • Виправити помилки: Надає контекстно-залежні пропозиції у разі помилки запитів
  • Рекомендації індексу: Пропонує індекси на основі відсутніх пропозицій щодо індексу в DMV або у плані запитів

GitHub Copilot також надає допомогу у вирішенні несправностей із запитами та продуктивністю бази даних, а також відповідає на запитання щодо обслуговування бази даних, найкращих практик, конфігурації баз даних і серверів тощо.

Увімкніть GitHub Copilot у SSMS

Щоб використовувати GitHub Copilot у SQL Server Management Studio:

  1. Переконайтеся, що у вас встановлений SSMS 22
  2. Встановіть GitHub Copilot, вибравши робоче навантаження AI Assistance у Visual Studio Installer
  3. Увійдіть за допомогою свого облікового запису GitHub, який має активну підписку на GitHub Copilot
  4. Налаштуйте свої вподобання в Інструментах > Опції > GitHub > Copilot та Інструменти >> Текстовий > редактор Вбудовані пропозиції

Примітка

Для GitHub Copilot потрібна підписка (індивідуальна, бізнесова або корпоративна). Деякі організації надають GitHub Copilot для своїх розробників як частину ліцензії на інструменти розробки. Підписка GitHub Copilot також може використовуватися з Visual Studio та VS Code.

Написання коду з вбудованими пропозиціями

GitHub Copilot надає пропозиції під час введення:

-- Start typing a query
SELECT c.CustomerName, 
-- GitHub 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

-- GitHub 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;

Сірий привидний текст показує пропозиції GitHub Copilot. Натисніть клавішу 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

-- GitHub 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 слідує шаблонам кодування у вашому поточному редакторі. Якщо ви використовуєте конкретні іменування, форматування або шаблони, GitHub Copilot включає їх у пропозиції:

-- If you typically write your queries like this:
SELECT 
    c.CustomerID
    ,c.CustomerName
    ,c.Email
FROM Customers AS c
WHERE c.IsActive = 1;

-- GitHub Copilot follows your style and suggests:
SELECT 
    o.OrderID
    ,o.OrderDate
    ,o.TotalAmount
FROM Orders AS o
WHERE o.Status = 'Completed';

Ця послідовність робить пропозиції більш природними і зменшує потребу у ручному форматуванні.

Застосуйте найкращі практики GitHub Copilot

Максимізуйте ефективність GitHub Copilot:

Практика Опис
Пишіть описові коментарі Чіткі, конкретні коментарі створюють кращі пропозиції коду
Використовуйте значущі назви Описові назви таблиць і стовпців допомагають GitHub Copilot зрозуміти контекст
Розбивайте складні завдання Пишіть кілька коментарів для складних процедур, а не один великий блок
Переглянути всі пропозиції Завжди перевіряйте згенерований код на правильність і безпеку
Наведіть приклади Включіть зразки даних або очікуваний результат у коментарі
Повторюйте пропозиції Якщо перша порада не підходить, спробуйте переформулювати свій коментар

Запит з природною мовою

Ставте запитання про свої дані простою англійською мовою:

-- Ask GitHub Copilot: "Show customers who placed more than 5 orders last month"

-- GitHub 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;

Оскільки GitHub Copilot підключається до вашої бази даних, він генерує код, який працює з вашою конкретною схемою.

Оптимізуйте продуктивність запитів

GitHub 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;

-- GitHub 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);

Розуміння та виправлення помилок

Коли запити не спрацьовують, GitHub Copilot пояснює проблему та пропонує виправлення:

-- Query with error:
SELECT CustomerName, SUM(TotalAmount)
FROM Orders;

-- Error: Column 'Orders.CustomerName' is invalid in the select list

-- Ask GitHub Copilot: "What's wrong with this query?"

-- GitHub 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;

Отримайте максимум від GitHub Copilot

Чат-вікно GitHub Copilot працює без підключення до бази даних, але воно набагато цінніше, коли у вас відкритий редактор запитів, підключений до бази даних. Використовуйте GitHub Copilot для загальної розробки T-SQL, завершення коду в редакторі, розуміння вашої бази даних і сервера, оптимізації запитів та іншого.

Розробники можуть використовувати GitHub Copilot для щоденного кодування та відповідей на конкретні питання щодо баз даних, що допомагає прискорити розробку баз даних, зберігаючи якість коду та використовуючи найкращі практики.