快速入门:使用 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

在 Azure Data Studio 中查询数据库

打开 Azure Data Studio 并查看数据。

  1. 在同一终端窗口中运行以下命令:

    sqlcmd open ads
    
  2. 有了数据库的本地副本后,即可运行查询。 下面是可用于分析客户支出的查询:

    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;
    

我们如何解决问题?

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

清理资源

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

sqlcmd delete --force

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