次の方法で共有


クイック スタート: sqlcmd を使用してコンテナー内にデータベースの新しいローカル コピーを作成する

このクイック スタートでは、sqlcmd で単一のコマンドを使用して新しいコンテナーを作成し、そのコンテナーにデータベースを復元して、開発またはテスト用にデータベースの新しいローカル コピーを作成します。

前提条件

  • DockerPodman などのコンテナーランタイムのインストール
  • Azure Data Studio のダウンロードとインストール
  • 最新の sqlcmd のインストール

解説

パッケージ マネージャーを使用して sqlcmd (Go) をインストールすると、環境パスで sqlcmd (ODBC) が sqlcmd (Go) に置き換えられます。 この変更を有効にするには、現在のコマンド ライン セッションを閉じてから再度開く必要があります。 sqlcmd (ODBC) は削除されず、実行可能ファイルへの完全なパスを指定すると引き続き使用できます。

PATH 変数を更新して、優先されるバージョンを指定することもできます。 Windows 11 でこれを行うには、[システム設定] を開き、[バージョン情報] > [システムの詳細設定] の順に移動します。 [システムのプロパティ] が開いたら、[環境変数] ボタンを選択します。 下半分の [システム変数] で、[Path][編集] の順に選択します。 sqlcmd (Go) が保存されている場所 (C:\Program Files\sqlcmd が既定値) がリスト内で C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn より前にある場合、sqlcmd (Go) が使用されます。

この順序を逆にして、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 フラグをオフのままにして、削除するつもりがないデータベースを誤って削除しないようにすることをお勧めします。