mssql について
`mssql` コマンドラインツールで Microsoft SQL Server データベースを調査・クエリするスキルです。読み取り専用クエリとスキーマ確認を優先し、制限のない変更コマンドには事前の明示的な承認を求めます。
主な機能
- 01保存済み接続の管理
- 02読み取り専用 SQL の実行
- 03テーブル構造とインデックスの確認
- 04JSON またはテキスト出力
- 05変更 SQL の実行前に承認を要求
活用シーン
- 01クエリ前のテーブル確認
- 02読み取り専用レポートや件数集計
- 03データベース接続の確認
- 04承認済みデータ修正の適用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ billpeet/ agent-skills --skill mssqlインストール後、Claude Code で/mssqlを入力して読み込まれたか確認します。
詳細
Microsoft SQL Server
mssql CLI を使用して Microsoft SQL Server データベースを操作します。すべてのコマンドは、確実に解析できるよう、デフォルトで JSON を出力します。
重要 — エージェントの安全ルール:
- ユーザーの明示的な承認なしに
mssql sql-dangerousを実行しないでください。 実行前に、必ず完全な SQL クエリをユーザーに提示し、その処理内容を説明してください。このコマンドはデータを変更または破壊する可能性があります(INSERT、UPDATE、DELETE、DROP など)。- 読み取りには
mssql sqlを優先してください。 SELECT クエリには、読み取り専用のmssql sqlコマンドを使用してください。危険なステートメントは自動的にブロックされます。- テーブル構造の情報が必要な場合は、直接クエリを実行するより
mssql schemaを優先してください。- スキーマが不明な場合は、まず
mssql schemaで確認してください。列名やテーブル名を推測しないでください。
セットアップ
サーバー接続を追加する
mssql server add --name mydb --server localhost --database MyDatabase --user sa --password "secret" --format json
mssql server add --name mydb --server db.example.com --database MyDatabase --windows-auth --trust-cert --format json
最初に追加したサーバーは、自動的にデフォルトに設定されます。設定は ~/.config/mssql-cli/config.json に保存されます。
環境変数
環境変数は一時的な接続を作成し、設定ファイルより優先されます。
export MSSQL_SERVER=localhost
export MSSQL_DATABASE=MyDatabase
export MSSQL_USER=sa
export MSSQL_PASSWORD=secret
export MSSQL_PORT=1433 # optional, default 1433
export MSSQL_ENCRYPT=true # optional
export MSSQL_TRUST_CERT=true # optional
export MSSQL_WINDOWS_AUTH=true # optional, use instead of user/password
サーバー管理
設定済みサーバーを一覧表示する
mssql server list --format json --pretty
デフォルトサーバーを設定する
mssql server default --name mydb --format json
接続をテストする
mssql server test --format json
mssql server test --name mydb --format json
サーバーを削除する
mssql server remove --name mydb --format json
グローバル設定を表示または更新する
mssql server config --format json
mssql server config --max-rows 500 --format json
maxRows 設定(デフォルト:100)は、クエリで返される行数を制限します。結果が上限に達すると、切り捨て警告が含まれます。
クエリ(読み取り専用)
SELECT クエリには mssql sql を使用してください。このコマンドは、データを変更する可能性のあるステートメント(INSERT、UPDATE、DELETE、DROP、CREATE、ALTER、TRUNCATE、MERGE、EXEC など)をブロックし、代わりに sql-dangerous を使用するよう指示します。
mssql sql --query "SELECT TOP 10 * FROM Users" --format json --pretty
mssql sql --query "SELECT COUNT(*) AS total FROM Orders WHERE Status = 'Pending'" --format json
mssql sql --query "SELECT u.Name, COUNT(o.Id) AS OrderCount FROM Users u JOIN Orders o ON u.Id = o.UserId GROUP BY u.Name" --server mydb --format json --pretty
mssql sql --file report.sql --format json --pretty
インライン SQL には --query を、.sql ファイルから SQL を読み込むには --file を使用します。これらのオプションは同時に指定できません。
結果は設定済みの maxRows(デフォルト:100)までに制限されます。行数がそれを超える場合、出力に切り捨て警告が含まれます。
クエリ(危険 — 変更を伴う)
エージェント:クエリをユーザーに提示し、明示的な承認を得る前に、このコマンドを絶対に実行しないでください。
データまたはスキーマを変更するステートメントには mssql sql-dangerous を使用してください。このコマンドには安全制限がありません。
mssql sql-dangerous --query "INSERT INTO Users (Name, Email) VALUES ('Alice', '[email protected]')" --format json
mssql sql-dangerous --query "UPDATE Orders SET Status = 'Shipped' WHERE Id = 42" --format json
mssql sql-dangerous --query "DELETE FROM Sessions WHERE ExpiresAt < GETDATE()" --format json
mssql sql-dangerous --query "CREATE INDEX IX_Users_Email ON Users(Email)" --format json
mssql sql-dangerous --file migration.sql --format json
mssql sql と同様に、インライン SQL には --query を、ファイルから読み込むには --file を使用します(同時に指定できません)。
出力には、結果行に加えて rowsAffected の件数が含まれます。
スキーマの確認
1 つ以上のテーブルについて、列、データ型、主キー、外部キー(両方向)、インデックスなどのスキーマ詳細を取得します。
mssql schema Users --format json --pretty
mssql schema Users Orders --format json --pretty
mssql schema dbo.Users sales.Orders --format json --pretty
テーブルでは、スキーマが指定されていない場合、デフォルトで dbo スキーマが使用されます。他のスキーマには schema.table 形式を使用してください。
出力形式
すべてのコマンドで、--format json(コンパクト、デフォルト)または --format text(人が読みやすい表形式)を指定できます。インデント付き JSON にするには --pretty を追加します。
終了コード:0 = 成功、1 = エラー。エラーは JSON 形式で stderr に出力されます。
よくあるワークフロー
クエリの前にテーブルを確認する:
mssql schema Users --format json --pretty
mssql sql --query "SELECT TOP 5 * FROM Users" --format json --pretty
テーブルごとの行数を確認する:
mssql sql --query "SELECT 'Users' AS TableName, COUNT(*) AS Rows FROM Users UNION ALL SELECT 'Orders', COUNT(*) FROM Orders" --format json --pretty
安全にデータを修正する(必ず事前にユーザーに確認する):
# 1. Check current state
mssql sql --query "SELECT Id, Email FROM Users WHERE Id = 42" --format json --pretty
# 2. After user approval, apply the fix
mssql sql-dangerous --query "UPDATE Users SET Email = '[email protected]' WHERE Id = 42" --format json
# 3. Verify the change
mssql sql --query "SELECT Id, Email FROM Users WHERE Id = 42" --format json --pretty