Files
relspecgo/pkg/readers/mssql
warkanum 9cc10715e3 feat: generated and identity columns for mssql, sqlite, drizzle, typeorm, bun and gorm readers
- mssql: write computed columns (AS (expr) PERSISTED) and identity; read computed definition and identity
- sqlite: write GENERATED ALWAYS AS (expr) STORED; read generated columns via table_xinfo and parse the expression
- drizzle: generatedAlwaysAs / generated(Always|ByDefault)AsIdentity, read and write
- typeorm: asExpression/generatedType and identity decorators, read and write; decorator scan is now quote-aware
- bun, gorm readers: read generated and identity markers
- readmes updated
2026-10-02 23:04:04 +02:00
..

MSSQL Reader

Reads database schema from Microsoft SQL Server databases using a live connection.

Features

  • Live Connection: Connects to MSSQL databases using the Microsoft ODBC driver
  • Multi-Schema Support: Reads multiple schemas with full support for user-defined schemas
  • Comprehensive Metadata: Reads tables, columns, constraints, indexes, and extended properties
  • Type Mapping: Converts MSSQL types to canonical types for cross-database compatibility
  • Extended Properties: Extracts table and column descriptions from MS_Description
  • Identity Columns: Maps IDENTITY columns to AutoIncrement
  • Relationships: Derives relationships from foreign key constraints

Connection String Format

sqlserver://[user[:password]@][host][:port][?query]

Examples:

sqlserver://sa:password@localhost/dbname
sqlserver://user:pass@192.168.1.100:1433/production
sqlserver://localhost/testdb?encrypt=disable

Computed and Identity Columns

  • sys.computed_columns -> Generated + GenerationExpression (outer parentheses removed; persisted or not)
  • Identity columns -> Identity + IdentityGeneration = ALWAYS

Supported Constraints

  • Primary Keys
  • Foreign Keys (with ON DELETE and ON UPDATE actions)
  • Unique Constraints
  • Check Constraints

Type Mappings

MSSQL Type Canonical Type
INT int
BIGINT int64
SMALLINT int16
TINYINT int8
BIT bool
REAL float32
FLOAT float64
NUMERIC, DECIMAL decimal
NVARCHAR, VARCHAR string
DATETIME2 timestamp
DATETIMEOFFSET timestamptz
UNIQUEIDENTIFIER uuid
VARBINARY bytea
DATE date
TIME time

Usage

import "git.warky.dev/wdevs/relspecgo/pkg/readers/mssql"
import "git.warky.dev/wdevs/relspecgo/pkg/readers"

reader := mssql.NewReader(&readers.ReaderOptions{
    ConnectionString: "sqlserver://sa:password@localhost/mydb",
})

db, err := reader.ReadDatabase()
if err != nil {
    panic(err)
}

// Process schema...
for _, schema := range db.Schemas {
    fmt.Printf("Schema: %s\n", schema.Name)
    for _, table := range schema.Tables {
        fmt.Printf("  Table: %s\n", table.Name)
    }
}

Testing

Run tests with:

go test ./pkg/readers/mssql/...

For integration testing with a live MSSQL database:

docker-compose up -d mssql
go test -tags=integration ./pkg/readers/mssql/...
docker-compose down