SSMS(SQL Server Management Studio) 21 でCopilotを使用してみる
はじめに
SSMS(SQL Server Management Studio) 21 よりCopilotがプレビュー実装されました。
最近は、VS Code + mssql + Github Copilotで大概のことは事足りるのですが、SQL Serverを操作する点では、SSMSを使うシーンがあります。
そんななか、ついにSSMSにもCopilotが実装されたとのことで、本記事作成に至ります。
SSMS(SQL Server Management Studio)とは
SQL Server Management Studio (SSMS) は、SQL インフラストラクチャを管理するための統合環境です。 SSMS を使用し、SQL Server、Azure SQL Database、Azure SQL Managed Instance、Azure VM 上の SQL Server、Azure Synapse Analytics のすべてコンポーネントのアクセス、構成、管理、運営、開発を行います。 SSMS には、さまざまなグラフィック ツールと、機能の豊富な多くのスクリプト エディターを結合して、すべてのスキル レベルの開発者やデータベース管理者が SQL Server にアクセスできるようにする包括的なユーティリティが 1 つ用意されています。
いわずもがな、SQL Serverを操作するための統合エディターです。
Copilot in SSMS
SQL Server Management Studio (SSMS) で Copilot を使用して、データベースと環境について質問し、AI を使用した Transact-SQL (T-SQL) の記述に関するヘルプを表示します。
ついにSSMSにもAIが搭載されたか、、感無量、というところ。
環境
- SQL Server 2022
- SQL Server Management Studio 21
- Azure AI Foundry
- gpt-4o-mini
SSMS Copilot使用設定
SSMS 21 をインストール際にAIアシスタントにチェックを入れてインストールします。
SSMS オプション設定 Copilotの項目から、事前に準備しているAzure OpneAIのAIモデルのエンドポイントとAPIキーを設定します。今回は、gpt-4o-miniとします。(ケチなので、できるだけ課金額が少ないモデルです。。)
検証
いざいざCopilot in SSMSを試してみます。
SSMSツールバーのCopilotアイコンをクリックして、Copilotをおもむろに立ち上げます。
できることを聞いてみる
まずはCopilotにできることを聞いてみます。
このCopilotではデータベースに対してどのような操作が可能ですか?
SQLの実行を自動的にはできないようですが、接続しているデータベースの情報を参照して、諸々のSQLやコマンドについてアドバイスいただけそうです。
データベース構築
1. データベース作成
とにもかくにも、データベースがないと始まりませんので作成していただくことにします。Copilotチャットの回答でSQLが生成されますが、「挿入」を押下すると、現在アクティブのクエリエディタに張り付けがされます。
テスト用のデータベースを作成してください。
「実行(F5)」でTestDatabaseが作成されました。
生成されたSQL
-- Created by Copilot in SSMS - review carefully before executing
CREATE DATABASE TestDatabase;
GO
2. テーブル作成
続いてテーブルを作成してもらいます。例としてよくあるユーザーマスタテーブルとデバイスマスタテーブルを作成してもらうとします。テキトーな指示でもそれっぽいテーブル設計をしてくれる点はうれしいです。
ユーザーを管理するテーブルとデバイス管理するテーブルを作成したいです。
生成されたSQL
-- Created by Copilot in SSMS - review carefully before executing
CREATE TABLE dbo.Users (
UserID INT IDENTITY(1,1) PRIMARY KEY,
UserName NVARCHAR(100) NOT NULL,
Email NVARCHAR(255) NOT NULL,
CreatedAt DATETIME DEFAULT GETDATE(),
UpdatedAt DATETIME DEFAULT GETDATE()
);
CREATE TABLE dbo.Devices (
DeviceID INT IDENTITY(1,1) PRIMARY KEY,
DeviceName NVARCHAR(100) NOT NULL,
UserID INT NOT NULL,
DeviceType NVARCHAR(50),
CreatedAt DATETIME DEFAULT GETDATE(),
UpdatedAt DATETIME DEFAULT GETDATE(),
FOREIGN KEY (UserID) REFERENCES dbo.Users(UserID)
);
Copilotより提案いただいたCREATE TABLEを実行し、無事テーブルが作成されました。
追加でユーザーマスタとリレーションがある部署マスタテーブルを作るように依頼を行います。
Usersに紐つく部署マスタを定義したいです。テーブルを作成してください。
生成されたSQL
-- Created by Copilot in SSMS - review carefully before executing
CREATE TABLE dbo.Departments (
DepartmentID INT PRIMARY KEY IDENTITY(1,1),
DepartmentName NVARCHAR(255) NOT NULL,
CreatedAt DATETIME NULL,
UpdatedAt DATETIME NULL
);
-- Created by Copilot in SSMS - review carefully before executing
-- 1. Users テーブルに DepartmentID カラムを追加
ALTER TABLE [dbo].[Users]
ADD [DepartmentID] int NULL;
-- 2. 外部キー制約を追加
ALTER TABLE [dbo].[Users]
ADD CONSTRAINT FK_Users_Departments
FOREIGN KEY ([DepartmentID]) REFERENCES [dbo].[Departments]([DepartmentID]);
さらにテストデータの作成を依頼してみます。テーブルの情報を参照して、テストデータを作ってくれるのは、かなり助かります。テスト工程において、テストデータを準備することはそれなりに時間かかりがちなので。。
UsersとDepartmentsにテスト用のデータを作成してください。
下記はテストデータを含めたSELECT結果です。
UsersとDepartmentsを使用して、ユーザー情報と部署情報を一覧取得するSQLを教えてください。
生成されたSQL
-- Created by Copilot in SSMS - review carefully before executing
SELECT
u.UserID,
u.UserName,
u.Email,
d.DepartmentID,
d.DepartmentName
FROM
[dbo].[Users] u
LEFT JOIN
[dbo].[Departments] d ON u.DepartmentID = d.DepartmentID;
キーを結合しての一覧表示も、あいまいな指示で実施してくれます。うれしすぎる。
ストアド作成
ストアドの作成を依頼してみます。例として、ユーザーマスタテーブルにレコード追加を行うストアドの作成を依頼しました。
ユーザーマスタテーブルにレコードを追加するストアドを作成してください。
生成されたSQL
CREATE PROCEDURE dbo.AddUser
@UserName NVARCHAR(255),
@Email NVARCHAR(255),
@CreatedAt DATETIME = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @CreatedAt IS NULL
BEGIN
SET @CreatedAt = GETDATE();
END
INSERT INTO dbo.Users (UserName, Email, CreatedAt)
VALUES (@UserName, @Email, @CreatedAt);
END
ストアド作成もそつなくこなしてくれます。
インデックス再構築
インデックス再構築を行うメンテナンスプランの作成を依頼してみました。
データベースのインデックスを再構築を行うメンテナンスプランを作成してください。
生成されたSQL
-- Created by Copilot in SSMS - review carefully before executing
DECLARE @TableName NVARCHAR(255)
DECLARE @SQL NVARCHAR(MAX)
DECLARE TableCursor CURSOR FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'ALTER INDEX ALL ON ' + QUOTENAME(@TableName) + ' REBUILD;'
EXEC sp_executesql @SQL
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
ですが、こちらはメンテナンスプランの作成ではなく、インデックス再構築を行うSQLが回答されましたね。。
ケチってモデルをgpt-4o-miniにしているからかもしれません。。今後に期待!
リレーション説明
テーブル間のリレーションについて説明してもらいます。
このデータベース内のテーブルのリレーションについて説明してください。どのようなデータベースといえるでしょうか?
なんとなんと、テーブル間の関係について解説回答してくれます。
何がうれしいのかって、構築済みデータベースの仕様を説明してもらえる点です。
経験上、途中参画のプロジェクトやSW改造プロジェクトでは、既設DBの仕様を理解することに時間がかかります。ですので、Copilotに聞ける点は、既設仕様を理解するうえで大変助かります。
まとめ
ということで、簡単にですが、SSMS 21 よりプレビュー実装されているCopilotを使用してみました。
接続しているDBを参照していろいろ聞ける点は大変うれしいです。
個人的には、テーブル構成を参照してのテストデータの作成依頼もかなり助かります。DBに接続するUIアプリ側のテストで、データ依存となってしまうテスト項目に対して抜けをなくせそうと感じました。
本記事の内容が何かのお役に立てば幸いです。
参考
- SQL Server Management Studio の Copilot
- Qiita SSMSでCopilotが使えるようにしてみた
Discussion
SSMSでコパイロット使えるんですね!
勉強になりました。
ドキュメントを出すのに変なツール入れなくて良さそうなが実用的ですね。
コメントいただきありがとうございます。
データベースの内容に直接働きかけられるため、おっしゃるようにドキュメント作成などへの活用にも大いに期待できそうです!
SSMS 21でのCopilotはプレビュー版とのことですので、今後のバージョンアップにも注目しています!