Copilot SQL查询提示词加示例教程 稳定输出技巧
在Copilot环境中编写SQL查询时,一个常见障碍是:提示词表述清晰,但生成结果却频繁跑偏。根源在于上下文缺失——Copilot对表结构、字段语义的理解,依赖更具体的指引信号。如果仅泛泛要求“查一下客户信息”,它很可能误判列名、搞乱JOIN关联,甚至扭曲聚合逻辑。
要修复这一问题,方法直接:在提示词中嵌入三个关键要素——明确的任务描述、精简的表结构定义,外加3至5条真实样例数据。三者缺一不可,搭配合理可大幅提升生成结果的准确率与稳定性。
确认当前环境支持示例输入
首先验证你使用的工具具备上下文感知能力。Fabric SQL数据库查询编辑器、Azure SQL Portal中的Copilot聊天窗格,或SSMS 19.4及以上版本均符合条件。老版SSMS或通用版Bing Copilot不会读取你粘贴的表结构和样例数据——你提供的schema描述会被直接忽略,它仅按通用语法猜测。
打开聊天窗格后,建议先发送一句测试提示,例如“列出最近7天订单总额”。如果Copilot能自动引用数据库中真实的表名(比如SalesLT.SalesOrderHeader),说明环境配置正确;若返回的是orders、customers这类通用表名,则表明当前会话未绑定数据库上下文,需切换至Fabric或Azure SQL门户内启用的Copilot。
构造带示例的提示词三要素
要确保Copilot稳定输出,提示中必须同时包含三样内容:明确任务、精简表结构、小而准的样例数据。缺一不可。
第一步,用自然语言锁定任务,动词要具体。❌“查一下客户信息”这种表述过于模糊,Copilot无法精准判断。✅改为“查询2025年Q1下单且收货地址含‘Shanghai’的客户姓名、邮箱和订单总金额”,这样它就清楚目标。
第二步,只提供本次查询涉及的表和字段,无关内容全部剔除。例如只查订单和客户,则仅列出SalesLT.Customer和SalesLT.SalesOrderHeader,字段限定为name、email、order_date、total_due。注意字段名必须与数据库中大小写完全一致——SQL Server默认不区分大小写,但Copilot在Fabric环境中会严格匹配。
第三步,插入3到5行真实的样例数据,采用Markdown表格格式,字段顺序与第二步定义完全一致。切勿使用[name]这类占位符,直接写'Alice Johnson'、'alice@demo.com'。Copilot对字符串字面量的识别能力,远强于抽象描述。
两种实操方法选其一
方法一:在Fabric SQL查询编辑器中边写边试
在编辑器顶部新建一行注释,以--开头,将完整结构粘贴进去:
-- 查询2025年Q1下单且收货地址含'Shanghai'的客户姓名、邮箱和订单总金额
-- 表结构:
-- SalesLT.Customer: CustomerID INT, FirstName NVARCHAR(50), EmailAddress NVARCHAR(100)
-- SalesLT.SalesOrderHeader: SalesOrderID INT, CustomerID INT, OrderDate DATE, TotalDue MONEY
-- 示例数据:
-- CustomerID | FirstName | EmailAddress
-- 1001 | Alice Johnson | alice@demo.com
-- 1002 | Bob Chen | bob@sh.cn
-- SalesOrderHeader:
-- SalesOrderID | CustomerID | OrderDate | TotalDue
-- 78901 | 1001 | 2025-02-15 | 1299.99
-- 78902 | 1002 | 2025-03-04 | 845.50
敲回车后,Copilot会立即在下方生成SELECT语句,自动完成INNER JOIN、WHERE时间范围过滤、LIKE匹配地址,还会加上LIMIT 100——这正是它读取样例数据中日期和金额类型后的精准响应。
方法二:在Azure SQL Portal聊天窗格中分段提交
先发送表结构定义(不含样例):“这是SalesLT.Customer和SalesLT.SalesOrderHeader的字段:CustomerID, FirstName, EmailAddress / SalesOrderID, CustomerID, OrderDate, TotalDue”。等Copilot确认理解后,再发第二条:“以下是我的查询需求和3行样例数据:查询2025年Q1……;样例:CustomerID=1001, FirstName='Alice', EmailAddress='alice@demo.com';SalesOrderID=78901, CustomerID=1001, OrderDate='2025-02-15', TotalDue=1299.99”。需要特别提醒:不要一次性把表结构、需求、样例揉成一条消息发出,Azure Copilot可能会截断或混淆优先级,效果将大打折扣。