快速入门:使用 sqlcmd 在容器中创建数据库的新本地副本

在本快速入门中,你将使用 sqlcmd 中的单个命令创建新容器,并将数据库还原到该容器,以创建数据库的新本地副本,以便进行开发或测试。

先决条件

注解

如果通过包管理器安装 sqlcmd (Go),会在环境路径中将 sqlcmd (ODBC) 替换为 sqlcmd (Go)。 需要关闭任何当前命令行会话,再将它们重新打开,才能使此更改生效。 sqlcmd (ODBC) 不会被移除,仍可通过指定可执行文件的完整路径来使用。

还可更新 PATH 变量来指示优先使用哪个版本。 若要在 Windows 11 中执行此操作,请打开“系统设置”,然后转到“关于”“高级系统设置”。 打开“系统属性”时,选择“环境变量”按钮。 在下半部分的“系统变量”下,选择“路径”,然后选择“编辑”。 如果 sqlcmd (Go) 保存到 前面列出的 C:\Program Files\sqlcmd(默认位置),则使用 sqlcmd (Go)C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn

可以颠倒顺序,使 sqlcmd (ODBC) 再次成为默认值。

下载并安装 sqlcmd (Go)

有关详细信息,请参阅 下载并安装 sqlcmd 实用工具

我们将解决什么问题?

本快速入门逐步讲解如何创建数据库的本地副本,然后查询数据库以分析客户的支出。

创建新的容器并还原数据库

使用最新版本的 SQL Server 在容器中创建新的 SQL Server 实例。 该命令还会还原 WideWorldImporters 数据库。

打开新的终端窗口并运行以下命令:

sqlcmd create mssql --name sql1 --accept-eula --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak

在 Visual Studio Code 中查询数据库

有了数据库的本地副本后,即可运行查询。

使用用于 Visual Studio Code 的 MSSQL 扩展连接到数据库,并运行以下查询来分析客户支出:

SELECT bg.BuyingGroupName AS CustomerName,
        COUNT(DISTINCT i.InvoiceID) AS InvoiceCount,
        COUNT(il.InvoiceLineID) AS InvoiceLineCount,
        SUM(il.LineProfit) AS Profit,
        SUM(il.ExtendedPrice) AS ExtendedPrice
FROM Sales.Invoices AS i
    INNER JOIN Sales.Customers AS c
        ON i.CustomerID = c.CustomerID
    INNER JOIN Sales.InvoiceLines AS il
        ON i.InvoiceID = il.InvoiceID
    INNER JOIN Sales.BuyingGroups AS bg
        ON c.BuyingGroupID = bg.BuyingGroupID
GROUP BY bg.BuyingGroupName
UNION
SELECT c.CustomerName,
        COUNT(DISTINCT i.InvoiceID) AS InvoiceCount,
        COUNT(il.InvoiceLineID) AS InvoiceLineCount,
        SUM(il.LineProfit) AS Profit,
        SUM(il.ExtendedPrice) AS ExtendedPrice
FROM Sales.Invoices AS i
    INNER JOIN Sales.Customers AS c
        ON i.CustomerID = c.CustomerID
    INNER JOIN Sales.InvoiceLines AS il
        ON i.InvoiceID = il.InvoiceID
    LEFT OUTER JOIN Sales.BuyingGroups AS bg
        ON c.BuyingGroupID = bg.BuyingGroupID
WHERE bg.BuyingGroupID IS NULL
GROUP BY c.CustomerName
ORDER BY Profit DESC;

我们如何解决问题?

可以快速创建数据库的本地副本,用于开发和测试。 使用单个命令,创建了一个新的本地实例,并还原了最新的备份。 然后运行另一个命令,通过 Visual Studio Code 连接到它。 然后,你使用 Visual Studio Code 的 MSSQL 扩展查询数据库,以分析客户的支出。

清理资源

尝试查询数据库后,使用以下命令删除容器:

sqlcmd delete --force

此处使用 --force 标志是为了方便起见,因为我们处于演示环境中。 在大多数情况下,最好不使用 --force 标志,以确保不会无意中删除你不想删除的数据库。