演習 - データベースに接続してサンプル データを追加する

完了

データベースをアプリに接続する前に、データベースに接続し、基本的なテーブルを追加し、サンプル データを操作できることを確認する必要があります。

Azure SQL Database のインフラストラクチャ、ソフトウェア更新プログラム、修正プログラムは Microsoft で維持します。 Azure SQL データベースは、他の SQL Server インストールと同様に扱うことができます。 たとえば、Visual Studio、SQL Server Management Studio、Azure Data Studio、またはその他のツールを使用して、ご自身の Azure SQL データベースを管理することができます。

任意の方法でデータベースにアクセスしてそれをアプリに接続できます。 データベースの操作経験をある程度積むために、ポータルから直接接続し、テーブルを作成し、基本的な CRUD 操作をいくつか実行してみましょう。 ここでは、次のことを学習します。

  • Cloud Shell の概要と、ポータルからアクセスする方法。
  • 接続文字列などのデータベースに関する情報に Azure CLI からアクセスする方法。
  • sqlcmd を使用してデータベースに接続する方法。
  • 基本的なテーブルといくつかのサンプル データを使用してデータベースを初期化する方法。

Azure Cloud Shell とは

Azure Cloud Shell は、Azure リソースを開発および管理するための、ブラウザー ベースのシェル環境です。 Cloud Shell は、クラウド上で動作する対話型コンソールと考えてください。

バックグラウンドでは Cloud Shell は Linux 上で動作しています。 しかし、Linux 環境と Windows 環境のどちらを好むかによって、Bash と PowerShell の 2 つのエクスペリエンスのいずれかを選択できます。

Cloud Shell は任意の場所からアクセスできます。 ポータル以外にも、shell.azure.com、Azure mobile app、または Visual Studio Code からも Cloud Shell にアクセスできます。

Cloud Shell には、一般的なツールとテキスト エディターが含まれています。 ここでは、この演習で使用する 3 つのツールである azjq、および sqlcmd ユーティリティについて簡単に説明します。

  • az は Azure CLI とも呼ばれます。 Azure のリソースを使用するためのコマンド ライン インターフェイスです。 このインターフェイスを使用して、接続文字列など、データベースに関する情報を取得します。
  • jq はコマンドライン JSON パーサーです。 az コマンドの出力をこのツールにパイプして、JSON 出力から重要なフィールドを抽出します。
  • sqlcmd を使用すると、SQL Server 上でステートメントを実行できます。 sqlcmd を使用して、Azure SQL データベースとの対話型セッションを作成します。

Azure SQL データベースに関する情報を入手する

データベースに接続する前に、データベースが存在していて、オンラインであることを確認することをお勧めします。

ここでは、az ユーティリティを使用してデータベースを一覧表示し、最大サイズと状態などの Logistics データベースに関する一部の情報を表示します。

  1. az コマンドを実行する場合、リソース グループの名前と Azure SQL 論理サーバーの名前が必要です。 キーストロークを保存するには、次の azure configure コマンドを実行して既定値として指定します。

    [server-name] は作成した Azure SQL 論理サーバーの名前に置き換え、[resource-group] はサーバーに使ったリソース グループに置き換えます。

    az configure --defaults group=[resource-group] sql-server=[server-name]
    

    Note

    ポータルに表示されているペインによっては、SQL サーバー名が FQDN 形式で表示される場合があります (例: servername.database.windows.net)。 ただし、このコマンドには、.database.windows.net サフィックスのない論理名のみが必要です。

  2. 次の az sql db list コマンドを実行して、Azure SQL 論理サーバー上のすべてのデータベースの一覧を表示します。

    az sql db list
    

    出力として JSON の大きなブロックが得られます。

  3. データベース名のみを取得したいので、コマンドをもう一度実行します。 しかし、今回は、出力を jq にパイプして、名前フィールドのみを表示します。

    az sql db list | jq '[.[] | {name: .name}]'
    

    次のような出力が得られるはずです。

    [
      {
        "name": "Logistics"
      },
      {
        "name": "master"
      }
    ]
    

    Logistics は自分のデータベースです。 SQL Server と同様、master システム データベースには、ログインやシステム構成の設定など、サーバーのメタデータが含まれています。

  4. 次の az sql db show コマンドを実行して、Logistics データベースに関する詳細情報を取得します。

    az sql db show --name Logistics
    

    前回と同様に、出力として大きなブロックの JSON が表示されます。

  5. このコマンドをもう一度実行します。 今回は、出力を jq にパイプして、Logistics データベースの名前、最大サイズ、状態のみに出力を制限します。

    az sql db show --name Logistics | jq '{name: .name, maxSizeBytes: .maxSizeBytes, status: .status}'
    

    データベースがオンラインであること、データベースに格納できるデータの最大量がわかります。

    {
      "name": "Logistics",
      "maxSizeBytes": 2147483648,
      "status": "Online"
    }
    

データベースに接続する

データベースの概要を少し理解したところで、sqlcmd を使用してデータベースに接続し、輸送ドライバーに関する情報を保持するテーブルを作成し、いくつかの基本的な CRUD 操作を実行してみましょう。

CRUD は、作成 (Create)、読み取り (Read)、更新 (Update)、削除 (Delete) の略です。 これらの用語はテーブル データに対して実行する操作を指します。また、アプリに必要な 4 つの基本操作です。 今が各操作を実行できることを確認するよい機会です。

  1. 次の az sql db show-connection-string コマンドを実行し、Logistics データベースへの接続文字列を、sqlcmd が使える形式で取得します。

    az sql db show-connection-string --client sqlcmd --name Logistics
    

    次の例のような内容が出力されます。 次のステップで使うので、この出力をコピーしておきます。

    "sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U <username> -P <password> -N -l 30"
    
  2. 前の手順の出力から sqlcmd ステートメントを実行して、対話型セッションを作成します。 囲んでいる引用符を削除し、<username><password> をデータベースの作成時に指定したユーザー名とパスワードに置き換えます。 次に例を示します。

    sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
    

    ヒント

    "&" と他の特殊文字が処理命令として解釈されないように、パスワードを一重引用符で囲みます。

    重要

    次の例のようなエラー メッセージが表示されることがあります。

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server:
    Cannot open server 'contoso' requested by the login.
    Client with IP address 'nnn.nnn.nnn.nnn' is not allowed to access the server.
    To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule
    on the master database to create a firewall rule for this IP address or address range.
    It may take up to five minutes for this change to take effect.
    

    このエラーが発生した場合は、クライアントに対して別のファイアウォール規則を追加する必要があります。 そのためには、次の手順を実行します。

    • Azure Portal にサインインします。

    • Azure ホーム ページの [Azure サービス] の下にある [すべてのリソース] を選択します。 [すべてのリソース] ペインが表示されます。

    • データベースを検索して選択します。 SQL データベースの [Logistics] ペインが表示されます。

    • 上部のメニュー バーの [サーバー ファイアウォールの設定] を選択します。 [ネットワーク] ペインが表示されます。

    • [ファイアウォール規則] セクションで、[ファイアウォール規則の追加] を選択します。 [ファイアウォール規則の追加] ウィンドウが表示されます。

    • 一意の [ルール名] を指定し、[開始 IP][終了 IP] の両方のフィールドにエラー メッセージの IP アドレスを入力します。 [OK] を選択します。

    • [保存] を選択します。

    • sqlcmd ステートメントをもう一度実行して、対話型 sqlcmd セッションを起動します。 これは、次の例のようになります。

    sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
    

    sqlcmd セッションを開始したので、残りのコマンドでは Transact-SQL または T-SQL 言語が使用されます。

    ヒント

    このモジュールで T-SQL コマンドを実行する場合、2 番目の行の GOsqlcmd プロンプトにコピーできないことがあります。 コマンドの最初の行を入力した後、GO コマンドを入力する必要がある場合があります。 T-SQL コマンドは GO コマンドなしには実行できないため、これを必ず実行してください。

  3. sqlcmd セッションから次の T-SQL ステートメントを実行し、Drivers という名前のテーブルを作成します。

    CREATE TABLE Drivers (DriverID int, LastName varchar(255), FirstName varchar(255), OriginCity varchar(255));
    GO
    

    このテーブルには、一意の識別子、ドライバーの姓、名、ドライバーの出発地 (市区町村) という 4 つの列があります。

  4. 次の T-SQL ステートメントを実行し、Drivers テーブルが存在することを確認します。

    SELECT name FROM sys.tables;
    GO
    

    次のような出力が得られるはずです。

    name
    --------------------------------------------------------------------------------------------------------------------------------
    Drivers
    
    (1 rows affected)
    
  5. 作成操作をテストするには、次の T-SQL ステートメントを実行して、サンプル行をテーブルに追加します。

    INSERT INTO Drivers (DriverID, LastName, FirstName, OriginCity) VALUES (123, 'Zirne', 'Laura', 'Springfield');
    GO
    

    この出力は、操作が成功したことを示します。

    (1 rows affected)
    
  6. 読み取り操作をテストするには、次の T-SQL ステートメントを実行し、テーブルのすべての行の DriverID 列と OriginCity 列を一覧表示します。

    SELECT DriverID, OriginCity FROM Drivers;
    GO
    

    前のステップで作成した行の DriverIDOriginCity を含む 1 つの結果が得られます。

    DriverID    OriginCity
    ----------- --------------------------
            123 Springfield
    
    (1 rows affected)
    
  7. 更新操作をテストするには、次の T-SQL ステートメントを実行し、DriverID が 123 のドライバーについて出発地を "Springfield" から "Boston" に変更します。

    UPDATE Drivers SET OriginCity='Boston' WHERE DriverID=123;
    GO
    
  8. 次の T-SQL ステートメントを実行して、DriverID 列と OriginCity 列を再び一覧表示します。

    SELECT DriverID, OriginCity FROM Drivers;
    GO
    

    今度は、次のような出力が得られるはずです。 OriginCity でボストンへの更新がどのように反映されているかを確認します。

    DriverID    OriginCity
    ----------- --------------------------
            123 Boston
    
    (1 rows affected)
    
  9. 最後に、次の T-SQL ステートメントを実行してレコードを削除し、削除操作をテストします。

    DELETE FROM Drivers WHERE DriverID=123;
    GO
    
    (1 rows affected)
    
  10. 次の T-SQL ステートメントを実行し、Drivers テーブルが空であることを確認します。

    SELECT COUNT(*) FROM Drivers;
    GO
    

    テーブルに行がないことがわかります。

    -----------
              0
    
    (1 rows affected)
    

Cloud Shell から Azure SQL Database を操作する概念がわかったので、SQL Server Management Studio、Visual Studio、それ以外など、好みの SQL 管理ツールの接続文字列を取得できます。

Cloud Shell を使用すると、Azure のリソースに簡単にアクセスして操作できます。 Cloud Shell はブラウザー ベースなので、Windows、macOS、Linux など、基本的に Web ブラウザーを備えた任意のシステムからアクセスできます。

ここでは、Azure CLI コマンドを実行して SQL Azure SQL Database に関する情報を取得する実践的な経験を得ました。 さらに、T-SQL のスキルについても実践しました。

次のユニットでは、このモジュールをまとめて、データベースを破棄する方法について説明します。