使用英语阅读

通过


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

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

先决条件

注解

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

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

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

下载并安装 sqlcmd (Go)

sqlcmd (Go) 可以在 Microsoft Windows、macOS 和 Linux 上跨平台安装。 高于 1.6 的版本可能不会在所有包管理器中提供。 尚未估计其发布日期。

apt (Debian/Ubuntu)

  1. 导入公共存储库 GPG 密钥。

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    
  2. 添加 Microsoft 存储库,其中 ubuntu/20.04 段可以是 debian/11ubuntu/20.04ubuntu/22.04

    add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/prod.list)"
    
  3. 使用 apt 安装 sqlcmd (Go)。

    apt-get update
    apt-get install sqlcmd
    

yum (Fedora)

  1. 导入 Microsoft 存储库密钥。

    rpm --import https://packages.microsoft.com/keys/microsoft.asc
    
  2. 下载存储库配置文件,其中 fedora/32 段可以是 opensuse/42.3rhel/8sles/15。 如果操作系统版本不直接对应于其中一个选项,则可能可以使用某个版本中的存储库配置文件。

    curl -o /etc/yum.repos.d/packages-microsoft-com-prod.repo https://packages.microsoft.com/config/fedora/40/prod.repo
    
  3. 使用 yum 安装 sqlcmd (Go)。

    yum install sqlcmd
    

直接下载

  1. 从 GitHub 代码存储库下载最新版本的 sqlcmd (Go) 中的相应 -linux-x64.tar.bz2-linux-arm.tar.bz2 资产。

  2. 从下载的 zip 文件夹中提取 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 i
                 INNER JOIN Sales.Customers c 
                     ON i.CustomerID = c.CustomerID
                 INNER JOIN Sales.InvoiceLines il 
                     ON i.InvoiceID = il.InvoiceID
                 INNER JOIN Sales.BuyingGroups 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 i
                 INNER JOIN Sales.Customers c
                     ON i.CustomerID = c.CustomerID
                 INNER JOIN Sales.InvoiceLines il
                     ON i.InvoiceID = il.InvoiceID
                 LEFT JOIN Sales.BuyingGroups 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 标志,以确保不会无意中删除你不想删除的数据库。