本記事は 2026/02/01 ~ 2026/03/02 の間毎日 AI アプリケーション開発(AI を搭載したアプリ開発 or AI を使用した開発)をテーマに 30 days AI challenge を行う 17 日目のブログポストです。
今日作成したのはデータベースへの接続やクエリテストを行える AI アプリです。
SQL Server へ接続する際、多くの場合 SSMS(SQL Server Management Studio)を使用しますが、SSMS の機能をいろいろいじってみたく AI で疑似アプリを作ってみました(といってもクエリ実行くらいしか機能はありません)。
アプリ概要
“SSMS のような” といっても、ただデータベースへ接続してクエリを実行できるアプリです。加えて AI 機能を搭載しています。
サーバー名、データベース名、ユーザー名、パスワードを用いることで SQL Server や Azure SQL Database 等 SQL Server 系データベースへ接続ができます(中身は Microsoft.Data.SqlClient です)。*現在は SQL 認証のみ対応しています。

ログイン後はクエリエディターと AI プロンプトエディターがあります。

クエリを実行してデータを取得することもできます。

実行プランを表示というオプションを有効にしてクエリを実行すると、XML の実際の実行プラン(Actual Plan)を表示することもできます。

AI クエリ生成では、自然言語を用いて行いたい処理やクエリを記載することで AI が SQL クエリを組み立ててくれます。
このまま実行ボタンを押すことで、生成したクエリを実行できます。

例えば、”テーブルサイズが 10 MB ほどになるようなテーブルの作成とデータの挿入を行ってください” とプロンプトを入れると、以下のようなクエリが生成されました。
IF OBJECT_ID('TenMBTable', 'U') IS NOT NULL DROP TABLE TenMBTable;
CREATE TABLE TenMBTable (ID INT IDENTITY(1,1) PRIMARY KEY, Filler CHAR(8000) NOT NULL DEFAULT REPLICATE('A', 8000));
INSERT INTO TenMBTable (Filler) SELECT TOP (1280) REPLICATE('A', 8000) FROM sys.all_columns AS a CROSS JOIN sys.all_columns AS b;
これを実行してテーブルのサイズを見ると 10 MB のデータを持つテーブルであることが確認できます。

ちなみに、AI への指示は SQL クエリの生成だけでなく、データベース接続(ドライバー)の設定変更も可能です。例えば、クエリタイムアウト値の変更を AI に指示することで変更も可能です。

技術要素
技術要素というほどでもないですが、以下のようにデータベースへの接続とクエリ実行を行っています(ここは完全に AI に任せた結果のコードです)。
var builder = new SqlConnectionStringBuilder
{
DataSource = serverName,
InitialCatalog = databaseName,
UserID = userName,
Password = password,
Encrypt = true,
TrustServerCertificate = true,
ConnectTimeout = dbSettings.ConnectionTimeoutSeconds
};
using var connection = new SqlConnection(baseConnectionString);
await connection.OpenAsync(loginCts.Token);
using var command = new SqlCommand(finalSql, connection, tx)
{
CommandTimeout = dbSettings.QueryTimeoutSeconds
};
using var reader = await command.ExecuteReaderAsync();
AI へのプロンプトの指示は以下の通り。JSON で結果を返すように指示をしており、自然言語から SQL クエリを生成させています。
private async Task GenerateAiAsync()
{
if (string.IsNullOrWhiteSpace(aiPrompt))
{
errorMessage = "AI への指示を入力してください。";
return;
}
try
{
isLoading = true;
errorMessage = null;
successMessage = null;
var prompt = $@"あなたは SQL Server のアシスタントです。以下の自然言語の指示に対して JSON で回答してください。**必ず JSON のみを返し、前後に説明文やコードフェンスを付けないでください。**
回答形式:
{{
""type"": ""query"" または ""settings"",
""query"": ""T-SQL"" または null,
""settings"": {{
""connectionTimeoutSeconds"": number,
""queryTimeoutSeconds"": number,
""retryCount"": number,
""useTransaction"": true/false,
""setOptions"": ""SET オプション文字列"" または null
}},
""proposal"": ""設定変更の説明"" または null
}}
注意: 設定変更指示の場合は type=settings を返し、query は null。クエリ生成の場合は type=query を返し、settings は null。
指示:
{aiPrompt}";
~以下略~
終わりに
今日は昨日に引き続き、やや仕事色が強いアプリでした。
SQL Server Management Studio にもすでに Copilot が搭載されているので似たようなことはできます!笑
もう少しカスタマイズして SSMS にはない機能や、データベース管理として必要な機能を追加していけたら割と使えるアプリになりそうな気はしています。仕事をしている中でアイデアがあればちょくちょく機能追加してみようと思います。
本日も閲覧いただきありがとうございました。明日もよろしくお願いします!

コメント