Snabbstart: Koppla upp och fråga med go-mssqldb

I denna quickstart ansluter du till en SQL Server-databas från Go och kör en fråga. Du använder drivrutinen go-mssqldb med standardpaketet database/sql .

Förutsättningar

För huvudexemplet i denna artikel behöver du:

  • Gå 1.25 eller senare
  • Tillgång till en SQL Server-kompatibel endpoint. Huvudexemplet antar en lokal SQL Server-instans på Windows.
  • Exempeldatabasen AdventureWorks2025 . För instruktioner om nedladdning och återställning, se AdventureWorks exempeldatabaser.

Om du ansluter till Azure SQL istället för en lokal SQL Server-instans, använd Use go-mssqldb med Azure SQL Database för Azure-specifika förutsättningar och uppsättning.

Välj startpunkt

Huvudexemplet i denna artikel använder en lokal SQL Server-instans på Windows med integrerad autentisering. Använd SQL-autentisering eller Microsoft Entra ID-varianterna senare i den här artikeln om du använder Linux eller macOS, eller om du ansluter till Azure SQL.

  • Fortsätt i den här artikeln om du vill ha det minsta end-to-end-exemplet mot SQL Server och du kan skapa en lokal testdatabas.
  • Om du ansluter med en SQL Server-inloggning istället för Windows authentication, fortsätt i denna artikel och använd SQL-autentiseringsvarianten senare.
  • Om du ansluter till Azure SQL Database, Azure SQL Managed Instance eller SQL Database in Fabric, börja med Use go-mssqldb with Azure SQL Database. Den artikeln täcker Azure TLS-krav, anslutningsgränser och lösenordslös autentisering.
  • Om du använder Microsoft Entra ID, importera github.com/microsoft/go-mssqldb/azuread och använd drivrutinsnamnetazuresql. För detaljer om inloggningsflödet, se Microsoft Entra ID-autentisering.

Skapa ett Go-projekt

  1. Skapa och initiera en ny katalog:

    mkdir go-sql-quickstart
    cd go-sql-quickstart
    go mod init go-sql-quickstart
    
  2. Installera drivrutinen:

    go get github.com/microsoft/go-mssqldb
    

Anslut och fråga

Skapa en fil med namnet main.go med följande Go-kod:

package main

import (
    "context"
    "database/sql"
    "fmt"
    "log"

    _ "github.com/microsoft/go-mssqldb"
)

func main() {
    // Build the connection string.
    connString := "sqlserver://<server>?database=AdventureWorks2025&trusted_connection=yes"

    // Open and verify the connection.
    db, err := sql.Open("sqlserver", connString)
    if err != nil {
        log.Fatal("Error opening connection: ", err.Error())
    }
    defer db.Close()

    if err = db.PingContext(context.Background()); err != nil {
        log.Fatal("Error pinging database: ", err.Error())
    }
    fmt.Println("Connected to SQL Server.")

    // Run a SELECT query.
    rows, err := db.QueryContext(context.Background(),
        "SELECT DepartmentID, Name, GroupName FROM HumanResources.Department")
    if err != nil {
        log.Fatal("Error running query: ", err.Error())
    }
    defer rows.Close()

    // Iterate through the results.
    fmt.Println("\nDepartments:")
    for rows.Next() {
        var id int
        var name, groupName string
        if err := rows.Scan(&id, &name, &groupName); err != nil {
            log.Fatal("Error scanning row: ", err.Error())
        }
        fmt.Printf("  %d: %s (%s)\n", id, name, groupName)
    }
    if err = rows.Err(); err != nil {
        log.Fatal("Error after row iteration: ", err.Error())
    }
}

Kör programmet:

go run main.go

Förväntat resultat:

Connected to SQL Server.

Departments:
  1: Engineering (Research and Development)
  2: Tool Design (Research and Development)
  3: Sales (Sales and Marketing)
  4: Marketing (Sales and Marketing)
  ...

Lägg in en rad

Lägg till följande funktion till main.go och anropa den från main():

func insertDepartment(db *sql.DB, name, groupName string) (int64, error) {
    ctx := context.Background()
    result, err := db.ExecContext(ctx,
        "INSERT INTO HumanResources.Department (Name, GroupName) VALUES (@p1, @p2)",
        sql.Named("p1", name),
        sql.Named("p2", groupName))
    if err != nil {
        return 0, err
    }
    return result.RowsAffected()
}

Important

Drivrutinen go-mssqldb stöder inte LastInsertId(). Att anropa den ger ett felmeddelande. Använd en OUTPUT klausul eller en separat SELECT SCOPE_IDENTITY() fråga för att hämta ett inlagt identitetsvärde.

Använda SQL-autentisering

För att ansluta genom att använda en SQL Server-autentisering istället för Windows authentication, ändra reťazec pripojenia. För alla format och alternativ för reťazec pripojenia, se Connection strings.

connString := "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025"

Använd Microsoft Entra ID

Om du ansluter till Azure SQL Database, Azure SQL Managed Instance eller SQL Database in Fabric, börja med Use go-mssqldb with Azure SQL Database. Exemplet i detta avsnitt visar endast de minsta kodändringar som krävs i main.go.

För att autentisera dig med Microsoft Entra ID, importera paketetazuread:

import (
    _ "github.com/microsoft/go-mssqldb/azuread"
)

Använd sedan drivrutinsnamnet azuresql och lägg till fedauth i reťazec pripojenia. För alla Microsoft Entra-alternativ, se Microsoft Entra ID-autentisering.

db, err := sql.Open("azuresql", "sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false")