114 lines
2.7 KiB
Plaintext
114 lines
2.7 KiB
Plaintext
# go-mssqldb - Microsoft's Official Go Driver for SQL Server
|
|
|
|
> Microsoft's official Go driver for SQL Server and Azure SQL Database
|
|
> For complete reference, see: llms-full.txt
|
|
|
|
## Quick Start
|
|
|
|
```go
|
|
import (
|
|
"database/sql"
|
|
"log"
|
|
|
|
_ "github.com/microsoft/go-mssqldb"
|
|
)
|
|
|
|
func main() {
|
|
db, err := sql.Open("sqlserver", "sqlserver://user:password@localhost:1433?database=mydb")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer db.Close()
|
|
|
|
// Query example using positional parameters (@p1, @p2, etc.)
|
|
rows, err := db.Query("SELECT @p1 AS Value", 42)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer rows.Close()
|
|
}
|
|
```
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
go get github.com/microsoft/go-mssqldb
|
|
```
|
|
|
|
## Key Features
|
|
|
|
- Works with SQL Server 2005+, SQL database in Microsoft Fabric, and Azure SQL Database
|
|
- Supports Windows Authentication, SQL Authentication, Azure AD, Entra, and Kerberos
|
|
- Always Encrypted support
|
|
- Bulk copy operations
|
|
- Named pipes and shared memory connections on Windows
|
|
- Table-valued parameters
|
|
- Stored procedure support with output parameters
|
|
|
|
## Connection String Formats
|
|
|
|
### URL Format (Recommended)
|
|
```
|
|
sqlserver://username:password@host:port?database=mydb
|
|
sqlserver://username:password@host/instance?database=mydb
|
|
```
|
|
|
|
### ADO Format
|
|
```
|
|
server=localhost;user id=sa;password=secret;database=mydb
|
|
```
|
|
|
|
### ODBC Format
|
|
```
|
|
odbc:server=localhost;user id=sa;password=secret;database=mydb
|
|
```
|
|
|
|
## Azure SQL Database with Azure AD
|
|
|
|
```go
|
|
import (
|
|
"database/sql"
|
|
"github.com/microsoft/go-mssqldb/azuread"
|
|
)
|
|
|
|
func main() {
|
|
// Enable TLS with certificate validation for Azure SQL
|
|
db, err := sql.Open(azuread.DriverName,
|
|
"sqlserver://myserver.database.windows.net?database=mydb&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false")
|
|
}
|
|
```
|
|
|
|
## Driver Names
|
|
|
|
- `sqlserver` - Standard driver, use `@name` or `@p1` parameter syntax
|
|
- `azuresql` - Azure AD authentication support (import `azuread` package)
|
|
- `mssql` - Deprecated, uses `?` parameter syntax
|
|
|
|
## Common Patterns
|
|
|
|
### Query with Named Parameters
|
|
```go
|
|
db.QueryContext(ctx, "SELECT * FROM users WHERE id = @ID", sql.Named("ID", 123))
|
|
```
|
|
|
|
### Execute Stored Procedure
|
|
```go
|
|
var result int
|
|
db.ExecContext(ctx, "sp_MyProc", sql.Named("Input", "value"), sql.Named("Output", sql.Out{Dest: &result}))
|
|
```
|
|
|
|
### Bulk Insert
|
|
```go
|
|
import mssql "github.com/microsoft/go-mssqldb"
|
|
|
|
stmt, _ := db.Prepare(mssql.CopyIn("tablename", mssql.BulkOptions{}, "col1", "col2"))
|
|
stmt.Exec(val1, val2)
|
|
stmt.Exec() // Flush
|
|
```
|
|
|
|
## Documentation
|
|
|
|
- Full documentation: https://pkg.go.dev/github.com/microsoft/go-mssqldb
|
|
- README: https://github.com/microsoft/go-mssqldb/blob/main/README.md
|
|
- Examples: https://github.com/microsoft/go-mssqldb/tree/main/examples
|