{"record":{"id":"c74f51ffd7d38823","repo":"golang-migrate/migrate","slug":"no-database-name-c74f51","errorCode":null,"errorMessage":"no database name","messagePattern":"no database name","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"database/sqlserver/sqlserver.go","lineNumber":29,"sourceCode":"\t\"strings\"\n\t\"sync/atomic\"\n\n\t\"github.com/Azure/go-autorest/autorest/adal\"\n\t\"github.com/golang-migrate/migrate/v4\"\n\t\"github.com/golang-migrate/migrate/v4/database\"\n\tmssql \"github.com/microsoft/go-mssqldb\" // mssql support\n)\n\nfunc init() {\n\tdatabase.Register(\"sqlserver\", &SQLServer{})\n}\n\n// DefaultMigrationsTable is the name of the migrations table in the database\nvar DefaultMigrationsTable = \"schema_migrations\"\n\nvar (\n\tErrNilConfig                 = fmt.Errorf(\"no config\")\n\tErrNoDatabaseName            = fmt.Errorf(\"no database name\")\n\tErrNoSchema                  = fmt.Errorf(\"no schema\")\n\tErrDatabaseDirty             = fmt.Errorf(\"database is dirty\")\n\tErrMultipleAuthOptionsPassed = fmt.Errorf(\"both password and useMsi=true were passed\")\n)\n\nvar lockErrorMap = map[int]string{\n\t-1:   \"The lock request timed out.\",\n\t-2:   \"The lock request was canceled.\",\n\t-3:   \"The lock request was chosen as a deadlock victim.\",\n\t-999: \"Parameter validation or other call error.\",\n}\n\n// Config for database\ntype Config struct {\n\tMigrationsTable string\n\tDatabaseName    string\n\tSchemaName      string\n}","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/golang-migrate/migrate/blob/01a9643f1475e75bb6d6224ddeaf9d8e2434ca8a/database/sqlserver/sqlserver.go#L11-L47","documentation":"Sentinel error ErrNoDatabaseName defined in database/sqlserver/sqlserver.go. It is a generic guard indicating that no database name could be determined when opening the driver — typically because the connection URL had no path (e.g. sqlserver://host without a /dbname component). The same sentinel pattern exists in other drivers such as cockroachdb, where Open returns it when the parsed database name is empty. Fix by including the database name in the URL path.","triggerScenarios":"URL without ?database= (or InitialCatalog) and no config.DatabaseName; WithInstance with Config{DatabaseName: \"\"}.","commonSituations":"Empty/unset DATABASE_NAME env var interpolated into the connection string; switching between DSNs and URLs and losing the database segment; server connections with no default database.","solutions":["Add database=<name> to the sqlserver:// URL query parameters","Set config.DatabaseName when calling WithInstance/WithConnection","Check the environment variable or secret supplying the database name is non-empty"],"exampleFix":"// before\nd, err := migrate.Open(\"sqlserver://sa:pass@localhost:1433\")\n// after\nd, err := migrate.Open(\"sqlserver://sa:pass@localhost:1433?database=mydb\")","handlingStrategy":"validation","validationCode":"u, _ := url.Parse(dsn)\nif u.Query().Get(\"database\") == \"\" {\n    return errors.New(\"sqlserver DSN must include database=<name>\")\n}","typeGuard":"func hasDatabase(u *url.URL) bool { return u.Query().Get(\"database\") != \"\" }","tryCatchPattern":null,"preventionTips":["Fail fast at config load if DATABASE_NAME env is empty","Always include ?database= in sqlserver migrate URLs","Add DSN validation in a startup/config unit test"],"tags":["go","sqlserver","database","migration","missing-database-name"],"backgroundTag":"missing-database-name","analyzedSha":"01a9643f1475e75bb6d6224ddeaf9d8e2434ca8a","analyzedAt":"2026-09-02T19:38:29.671Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}