package main import ( "database/sql" "fmt" _ "github.com/microsoft/go-mssqldb" ) type Column struct { Name string TypeName string MaxCharacterLength *int } func fetchTableMetadata() ([]Column, error) { connStr := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;encrypt=disable", host, username, password, port, dbname) db, err := sql.Open("sqlserver", connStr) if err != nil { return nil, err } defer db.Close() query := ` SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName; ` var columns []Column rows, err := db.Query(query, sql.Named("tableName", table)) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var col Column err = rows.Scan(&col.Name, &col.TypeName, &col.MaxCharacterLength) if err != nil { return nil, err } columns = append(columns, col) } return columns, nil }