sqldb-authoring-cli
Create and manage SQL database in Fabric items, author T-SQL DDL/DML with constraints, foreign keys, triggers, indexes, and vector columns. Deploy schema via…
npx skills add https://github.com/microsoft/skills-for-fabric --skill sqldb-authoring-cliUpdate Check — ONCE PER SESSION (mandatory) The first time this skill is used in a session, run the check-updates skill before proceeding.
- GitHub Copilot CLI / VS Code: invoke the
check-updatesskill.- Claude Code / Cowork / Cursor / Windsurf / Codex: compare local vs remote package.json version.
- Skip if the check was already performed earlier in this session.
CRITICAL NOTES
- To find the workspace details (including its ID) from workspace name: list all workspaces and, then, use JMESPath filtering
- To find the item details (including its ID) from workspace ID, item type, and item name: list all items of that type in that workspace and, then, use JMESPath filtering
SQL Database Authoring — CLI Skill
Create and manage SQL database in Fabric items, author T-SQL DDL/DML, deploy schema via SqlPackage, configure source control, CI/CD, and GraphQL APIs using sqlcmd and az rest.
Table of Contents
| Topic | Reference |
|---|---|
| Finding Workspaces and Items in Fabric | COMMON-CLI.md § Finding Workspaces and Items in Fabric — read first |
| Authentication & token acquisition | COMMON-CORE.md § Authentication and COMMON-CLI.md § Authentication Recipes |
| SQL / TDS Data-Plane Access (sqlcmd) | COMMON-CLI.md § SQL / TDS Data-Plane Access |
| CLI Gotchas (audience, escaping, expiry) | COMMON-CLI.md § Gotchas & Troubleshooting |
SQL Database item definitions (dacpac/sqlproj) | ITEM-DEFINITIONS-CORE.md § Per-Item-Type Definitions |
| SQL Database vs DW capability matrix | SQLDB-AUTHORING-CORE.md § SQL Database vs Data Warehouse |
| Database Lifecycle, Table DDL, Temporal, Views, DML, BCP, Procs/Functions/Triggers, SqlPackage, Source Control, GraphQL, Mirroring, Auditing, CMK, Permissions, Gotchas, Patterns, Decision Guide | SQLDB-AUTHORING-CORE.md (all sections) |
| T-SQL Anti-Patterns | SQLDB-AUTHORING-CORE.md § T-SQL Anti-Patterns |
| Schema Design Guidance | SQLDB-AUTHORING-CORE.md § Schema Design Guidance |
| Limitations Reference (unsupported features, resource limits) | SQLDB-AUTHORING-CORE.md § Limitations Reference |
| Endpoint Selection | SQLDB-CONSUMPTION-CORE.md § Endpoint Selection |
| Metadata and Schema Discovery | SQLDB-CONSUMPTION-CORE.md § Metadata and Schema Discovery |
| Deep Performance Diagnostics | sqldb-operations-cli |
For Fabric topology, capacity, OneLake, auth, control-plane REST, jobs see COMMON-CORE.md and COMMON-CLI.md.
Tool Stack
| Tool | Role | Setup Reference |
|---|---|---|
sqlcmd (Go) | Primary: Execute DDL/DML T-SQL. Standalone binary, no ODBC, built-in Entra ID auth. | See COMMON-CLI.md for installation and authentication prerequisites. |
sqlpackage | Schema deployment (.dacpac), database portability (.bacpac). | See COMMON-CLI.md for installation and environment setup prerequisites. |
az CLI | Fabric REST for endpoint discovery and database creation. | See COMMON-CLI.md for Azure CLI authentication and token setup. |
jq | Parse JSON from az rest. | See COMMON-CLI.md for shared CLI/tooling prerequisites. |
Agent check — before first operation, confirm the required CLI tools and authentication are already configured by following the shared setup guidance in COMMON-CLI.md. Do not duplicate install or
az loginsteps in this skill.
Connection
Discover the SQL Database TDS Endpoint
For workspace/item resolution, SQL Database endpoint discovery, and CLI connection patterns, use the shared guidance in common/COMMON-CLI.md and common/COMMON-CORE.md instead of embedding az rest or sqlcmd recipes here.
Follow the SQL Database endpoint discovery steps in COMMON-CLI.md, then bring the discovered server FQDN and database name back into this skill for SQLDB-specific authoring and deployment tasks.
- Use the SQL Database endpoint values returned by Fabric for the target item; do not hardcode endpoint domains or database names.
- When generating deployment or authoring steps, treat connectivity details as inputs discovered via the shared common guidance.
- Focus this skill on schema authoring, DDL/DML design, constraints, indexing, source control, SqlPackage deployment, and GraphQL/API behaviors rather than connection bootstrapping.
Connection guidance
If the user needs help connecting interactively or from CI/CD, refer them to common/COMMON-CLI.md for the shared sqlcmd setup, authentication, and invocation patterns.
For SQLDB-specific authoring in this skill, assume the connection inputs are already known:
serverFqdndatabaseName
Agentic Workflows
Schema Discovery Before Authoring
Before any write operation, discover the target schema:
# 1. List tables
$SQLCMD -Q "SELECT table_schema, table_name FROM information_schema.tables WHERE table_type='BASE TABLE' ORDER BY 1,2" -W
# 2. Check columns
$SQLCMD -Q "SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name='Orders' ORDER BY ordinal_position" -W
# 3. Sample data
$SQLCMD -Q "SELECT TOP 5 * FROM dbo.Orders" -W
# 4. Check constraints
$SQLCMD -Q "SELECT tc.constraint_name, tc.constraint_type, kcu.column_name FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name=kcu.constraint_name WHERE tc.table_name='Orders' ORDER BY tc.constraint_type" -W
# 5. Check indexes
$SQLCMD -Q "SELECT i.name, i.type_desc, STRING_AGG(c.name,', ') WITHIN GROUP (ORDER BY ic.key_ordinal) AS cols FROM sys.indexes i JOIN sys.index_columns ic ON i.object_id=ic.object_id AND i.index_id=ic.index_id JOIN sys.columns c ON ic.object_id=c.object_id AND ic.column_id=c.column_id WHERE i.object_id=OBJECT_ID('dbo.Orders') GROUP BY i.name, i.type_desc" -W
# 6. Row counts
$SQLCMD -Q "SELECT s.name AS [schema], t.name AS [table], SUM(p.rows) AS row_count FROM sys.tables t JOIN sys.schemas s ON t.schema_id=s.schema_id JOIN sys.partitions p ON t.object_id=p.object_id AND p.index_id IN (0,1) GROUP BY s.name, t.name ORDER BY row_count DESC" -W
# 7. Programmability objects
$SQLCMD -Q "SELECT name, type_desc FROM sys.objects WHERE type IN ('V','FN','IF','P','TF','TR') ORDER BY type_desc, name" -W
Workflow
- Discover → Run steps 1–5 to understand available tables/columns.
- Sample →
SELECT TOP 5on relevant tables. - Formulate → Select pattern from SQLDB-AUTHORING-CORE.md (Table DDL, Temporal Tables, Data Virtualization, Views, DML, etc.).
- Execute →
$SQLCMD -Q "..."or$SQLCMD -i file.sqlfor multi-statement. - Verify → Query affected table (
SELECT COUNT(*),SELECT TOP 5). - Deploy (optional) → Extract with
sqlpackage /Action:Extractfor .dacpac; set up source control.
Gotchas, Rules, Troubleshooting
For full authoring gotchas: SQLDB-AUTHORING-CORE.md Authoring Gotchas and Troubleshooting. For CLI-specific issues: COMMON-CLI.md Gotchas & Troubleshooting (CLI-Specific).
MUST DO
- Verify workspace has capacity before creating database — call
GET /v1/workspaces/{id}and checkcapacityId. - Always
-d <DatabaseName>— FQDN alone is insufficient. - Always
-Gor--authentication-method— SQL auth not supported on Fabric. - Follow COMMON-CLI.md authentication guidance first —
ActiveDirectoryDefaultdepends on an authenticated CLI session. - Specify collation at creation — cannot be changed after the database is created.
- Use SqlPackage for repeatable deployments — extract .dacpac → publish for incremental schema changes.
- Use
-i file.sqlfor multi-statement batches (CREATE PROCEDURE, transactions with GO separators). SET NOCOUNT ON;in scripts — suppresses row-count messages that corrupt output.
AVOID
- ODBC sqlcmd (
/opt/mssql-tools/bin/sqlcmd) — use the Go version. - Omitting
-Win scripts — trailing spaces corrupt CSV. - Hardcoded FQDNs — discover via REST API.
- MARS — not supported. Remove
MultipleActiveResultSets. CREATE LOGIN/ SQL authentication — Entra users only.- Modifying tables with CCI /
ALTER INDEX ALLwhile mirroring is active — stop mirroring or alter individual indexes. vector/jsoncolumns on tables that must mirror — cannot be mirrored to OneLake.- Special characters in DB / column names — see Limitations Reference.
- Modifying
.sqlprojin source-controlled repo — reset on next sync. - Unsupported features (CDC, Always Encrypted, in-memory, ledger, full-text GA, partition SWITCH,
EXECUTE AS,hierarchyid/sql_variant/timestampPKs, CTAS, COPY INTO) — see Limitations Reference for the full list. - Exceeding resource limits (32 vCores, 4 TB, 1024 GB tempdb, 150 DBs/workspace).
PREFER
az restfor database creation over portal — scriptable and repeatable.- SqlPackage publish (.dacpac) over manual DDL for schema evolution — tracks incremental changes.
- Enforced constraints (PK, FK, CHECK, DEFAULT) — SQL Database supports them fully, unlike DW.
- Temporal tables for audit trails and slowly-changing dimensions — full system-versioning available. Note: history table is excluded from mirroring.
- Data virtualization (external tables / OPENROWSET) to query OneLake without ETL. Note: external tables themselves are not mirrored.
INSERT ... SELECTfor bulk data movement within the database.- BCP for high-performance bulk import/export.
- Native AI functions / sp_invoke_external_rest_endpoint for embedding generation in T-SQL.
sqlcmd (Go) -Gover curl+token for SQL queries.-Q(non-interactive exit) for agentic use.-i file.sqlover-Q "..."for anything beyond simple one-liners.-F verticalfor exploration of wide tables.- Env vars (
FABRIC_SERVER,FABRIC_DB) for script reuse. - Auto-tuning — let the engine manage indexes; check
sys.dm_db_tuning_recommendationsperiodically. - Optimized locking — enabled by default; reduces lock memory and eliminates lock escalation.
TROUBLESHOOTING
| Symptom | Fix |
|---|---|
| SqlPackage auth error | Use Authentication=Active Directory Default in connection string |
Login failed for user | Verify -d matches database display name exactly (case-sensitive) |
Cannot open server / Login timeout expired | Re-discover FQDN via REST API; check port 1433 / firewall |
ActiveDirectoryDefault failure | az login session may be expired — refresh Azure CLI authentication per common/COMMON-CLI.md |
| Collation error after creation | Cannot change — must recreate database with desired collation |
| Foreign key violation on INSERT | Check referenced table has matching row; verify column types |
| Vector insert dimension mismatch | Ensure vector literal has exactly the declared dimensions |
| CCI creation fails on existing table | Stop mirroring, create index, restart mirroring. CCI created inline with CREATE TABLE also prevents mirroring of that table |
| Table not mirrored after DDL change | DDL changes trigger a full data reseed; table with unsupported PK type or >1000 tables are skipped |
| Vector/json column prevents mirroring | Tables with vector or json columns cannot be mirrored; use OLTP endpoint to query these |
| Computed columns missing from analytics endpoint | Computed columns are skipped during mirroring |
| LOB data truncated on analytics endpoint | LOB columns > 1 MB are truncated in OneLake |
ALTER INDEX ALL fails | Not allowed while mirroring is active; alter individual indexes by name |
Garbled CSV / (N rows affected) in file | Add -W -s"," -w 4000; prepend SET NOCOUNT ON; |
sp_invoke_external_rest_endpoint 401 | Create/verify database-scoped credential for target URL |
sqlcmd not found | Ensure sqlcmd is installed and on PATH; follow the shared CLI setup guidance in common/COMMON-CLI.md |
| Connection fails on redirect ports | Connection policy requires ports 11000–11999 open in addition to 1433 |