在使用 SQL Server 时如何避免重复造轮子
想象一下,你需要快速测试数据库中的新功能或为客户部署演示环境。通常这会变成一项任务:想出表结构,填充至少有些真实的数据,还不能忘记索引。微软很久以前就解决了这个问题,把你需要的一切都汇集在一个地方。

这个代码仓库是什么
sql-erver-samples 项目是微软官方的「沙盒」。它不仅包含代码片段,还提供了整个 Azure Data 产品线的完整示例:从经典的 SQL Server 到 Azure Synapse 和 SQL Edge。
这里的主要价值在于现成的数据库和场景。如果你刚开始学习 SQL,或者想了解 In-Memory OLTP 等复杂特性在真实条件下的表现,这个代码仓库可以为你节省数十小时的时间。
这个套件的用途
该代码仓库有几个关键领域,每个领域都针对特定的开发者或数据库管理员任务。
适用于各种任务的现成数据库
你得到的是填充了数据的项目,而不是空表。最著名的包括:
- Wide World Importers。SQL Server 2016 及更高版本的现代标准。它拥有一切:从常规事务处理(OLTP)到分析多维数据集(OLAP)。
- AdventureWorks。几代管理员成长的经典之作。有多种变体:从轻量级版本到大型数据仓库。
- Northwind。对于喜欢可视化结构的人,发布版本甚至包含该数据库的实体图。
性能演示
最有趣的部分之一是 In-Memory OLTP Performance Demo。这是一个现成的演示,清楚地展示了常规表和内存表之间的速度差异。当你需要向业务部门证明迁移到新技术的合理性时,这样的数据比任何演示都更有说服力。
物联网场景
对于从事硬件工作的人来说,有 IoT Smart Grid。这是一个展示 SQL Server 如何处理来自传感器的大规模数据流的示例。它演示了整个周期:从数据摄取到实时分析。
如何使用这个代码仓库
该代码仓库很大——超过 500 MB。为了一个脚本而克隆整个仓库没有意义。开发者预见到了这一点,并提供了稀疏检出功能。这允许你只下载需要的文件夹。
以下是如何仅获取功能和演示材料:
git clone -n https://github.com/Microsoft/sql-server-samples
cd sql-server-samples
git config core.sparsecheckout true
echo samples/features/* >> .git/info/sparse-checkout
echo samples/demos/* >> .git/info/sparse-checkout
git checkout
顺便说一下,如果你不想处理代码和构建,请查看 Releases 部分。那里有现成的 .bak 和 .bacpac 文件。你只需几次点击就可以将它们部署到服务器上。
实际用例
我在两个场景中经常使用这些材料。首先是用于培训。如果你需要向同事解释分区或列存储索引的工作原理,在 Wide World Importers 上演示比在餐巾纸上画图更容易。
其次,它是负载测试的绝佳基础。你不需要生成随机噪声,而是使用 AdventureWorks 结构并针对它运行查询。这会产生更可预测和更真实的结果。
microsoft/sql-erver-samples 代码仓库对以下人员有用:
- 需要真实数据来调试应用程序的开发者。
- 学习数据库设计最佳实践的架构师,这些最佳实践来自引擎创建者本身。
- 任何想要尝试 Azure Synapse 或 SQL Edge 而无需从头开始设置环境的人。
这不是你每天都会研究的项目,但绝对值得收藏。当优化或迁移任务出现时,你会感谢自己没有手动编写数据生成器。
相关项目