このクイック スタートでは、ビジネス ロジック Explainer を使用して、SQL、ORM (Object-Relational Mapping) フレームワーク、またはデータベースに直接実装された複雑なアプリケーション ロジックを開発者が理解して操作する方法について説明します。 アシスタントは、SQL コード、ORM モデル、または既存のデータベース スキーマを分析して、基になるビジネス ルールを説明し、実用的なドキュメントを提供します。
概要
データベースに接続されていて、MSSQL 拡張機能でアクティブなエディター ウィンドウが開かれていることを確認します。 この接続により、 @mssql チャット参加者はデータベース環境のコンテキストを理解できるため、正確でコンテキストに対応した提案が可能になります。 データベース接続がないと、チャット参加者は意味のある応答を提供するスキーマまたはデータ コンテキストを持ちません。
次の例では、 AdventureWorksLT2022 サンプル データベースを使用します。このデータベースは、 Microsoft SQL Server サンプルとコミュニティ プロジェクト のホーム ページからダウンロードできます。
最適な結果を得るには、独自の環境に合わせてテーブル名とスキーマ名を調整します。
チャットに @mssql プレフィックスが含まれていることを確認します。 たとえば、「 @mssql 」と入力し、その後に質問またはプロンプトを入力します。 これにより、チャット参加者は、SQL 関連のサポートを求めていることを理解できます。
GitHub Copilot を使用してビジネス ロジックを理解する
GitHub Copilot は、データベース コード、ORM モデル、およびアプリケーション クエリに埋め込まれているビジネス ルールを理解し、説明するのに役立ちます。 ストアド プロシージャから LINQ クエリ、続編式まで、GitHub Copilot は自然言語の分析情報を提供し、複雑なロジックのアクセシビリティを高めます。
チャット参加者から質問できる一般的なユース ケースと例を次に示します。
T-SQL ロジックの説明
GitHub Copilot を使用して、ストアド プロシージャからインライン条件ステートメントまで、Transact-SQL (T-SQL) ロジックを理解して説明します。 割引ルール、手続きロジック、最適化条件のいずれを確認する場合でも、GitHub Copilot は T-SQL に実装されているビジネス ルールを分析して文書化できます。
ストアドプロシージャを説明する
Explain what the `SalesLT.uspGetCustomerOrderHistory` stored procedure does and suggest ways to optimize it.
ストアド プロシージャをデバッグする
Debug the `SalesLT.uspGetTopSellingProducts` stored procedure and suggest improvements.
コード スニペットでビジネス ロジックを説明する
Analyze the following SQL code snippet from my current database. Document the business rules implemented in this discount application process, including conditions for eligibility, discount rate adjustments, and any limits imposed on the discount amount. Also, provide actionable insights or suggestions to improve clarity or performance if necessary.
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 クエリの説明
Explain what the following SQLAlchemy query does:
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 クエリについて説明する
What does this Entity Framework LINQ query do? Describe how it groups customers by tier based on their total purchases.
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 クエリのビジネス ロジックについて説明する
Analyze the logic of this Prisma query and explain how it determines which products are considered "low inventory".
const lowInventoryProducts = await prisma.product.findMany({
where: {
SafetyStockLevel: {
lt: 50
}
},
select: {
ProductID: true,
Name: true,
SafetyStockLevel: true
}
});
続編クエリの説明とコメント
Review and explain what this Sequelize query does. Add inline comments to clarify how it calculates total revenue per customer and filters for customers with significant spending:
const results = await SalesOrderHeader.findAll({
attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
group: ['CustomerID'],
having: sequelize.literal('SUM(TotalDue) > 5000')
});
製品の一覧に対する SQLAlchemy クエリを生成する
Using SQLAlchemy, generate a query to list products that have never been ordered and ask GitHub Copilot to explain the join logic and filtering behavior.
Prisma クエリを使用して顧客情報を取得する
In Prisma, write a query that retrieves customers who placed an order in the last 30 days. Explain what the following Prisma query does. Add inline comments to clarify how the date filtering works and how recent orders are determined:
クエリを使用してビジネスの意図を理解する
GitHub Copilot は、開発者がクエリのしくみだけでなく、それが存在する理由を理解するのに役立ちます。 この説明には、データ フィルター、グループ化、集計の背後にある実際の目的が含まれます。 これらの説明は、オンボード時に特に役立ちます。開発者は、SQL および ORM コードに埋め込まれたレポート、ロジック ゲート、またはシステム メトリックの背後にある目標を把握できます。
T-SQL クエリでのビジネス目標について説明する
Describe the business goal of the following SQL query. What insight is it trying to surface?
SELECT TOP 10 CustomerID,
COUNT(*) AS OrderCount
FROM SalesLT.SalesOrderHeader
GROUP BY CustomerID
ORDER BY OrderCount DESC;
T-SQL クエリの意図を要約する
Summarize what this query is intended to achieve from a business perspective.
SELECT ProductID,
SUM(LineTotal) AS TotalSales
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > 10000;
ストアド プロシージャのビジネス ロジックについて説明する
Analyze the `SalesLT.uspGetCustomerOrderHistory` stored procedure and describe the business logic it implements.
Entity Framework LINQ クエリでビジネス ロジックを説明する
Explain this Entity Framework LINQ query and describe what business logic it implements:
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();
続編クエリでビジネス上の前提条件を説明する
Using Sequelize, explain what this query does and describe any business assumptions it makes:
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 の応答の強化に関するアイデアを共有します。
関連コンテンツ
- Visual Studio Code 用 MSSQL 拡張機能のための GitHub Copilot
- クイックスタート: チャット機能とGitHub Copilotのインライン提案を使う
- クイック スタート: コードを生成する
- クイック スタート: スキーマ エクスプローラーとデザイナーを使用する
- クイック スタート: スマート クエリ ビルダーを使用する
- クイック スタート: クエリ オプティマイザー アシスタント
- クイック スタート: セキュリティ アナライザー
- クイック スタート: ローカライズと書式設定ヘルパー
- クイックスタート: テストとモックテスト作成のためにデータを生成する
- 制限事項と既知の問題