Rychlý start: Připojte se a dotazujte pomocí go-mssqldb

V tomto rychlém startu se připojíte k databázi SQL Server z Go a spusťujete dotaz. Používáte ovladač go-mssqldb se standardním balíčkem database/sql.

Prerequisites

Pro hlavní ukázku v tomto článku potřebujete:

Pokud se připojujete k Azure SQL místo lokální instance SQL Server, použijte Use go-mssqldb s Azure SQL Database pro specifické požadavky a nastavení pro Azure.

Výběr výchozího bodu

Hlavní ukázka v tomto článku používá lokální instanci SQL Server na Windows s integrovanou autentizací. Použijte varianty SQL autentizace nebo Microsoft Entra ID později v tomto článku, pokud jste na Linuxu nebo macOS, nebo pokud se připojujete k Azure SQL.

  • Pokračujte tímto článkem, pokud chcete co nejmenší end-to-end ukázku pro SQL Server a můžete vytvořit místní testovací databázi.
  • Pokud se připojujete přes přihlášení přes SQL Server místo Windows authentication, pokračujte v tomto článku a později použijte variantu SQL autentizace.
  • Pokud se připojujete k Azure SQL Database, Azure SQL Managed Instance nebo SQL databázi ve Fabric, začněte s Use go-mssqldb with Azure SQL Database. Tento článek se zabývá požadavky Azure TLS, limity připojení a autentizaci bez hesla.
  • Pokud používáte Microsoft Entra ID, importujte github.com/microsoft/go-mssqldb/azuread a použijte název ovladačeazuresql. Pro podrobnosti o toku přihlašovacích údajů viz Microsoft Entra ID authentication.

Vytvoření projektu Go

  1. Vytvořte a inicializujte nový adresář:

    mkdir go-sql-quickstart
    cd go-sql-quickstart
    go mod init go-sql-quickstart
    
  2. Nainstalujte ovladač:

    go get github.com/microsoft/go-mssqldb
    

Připojení a dotazování

Vytvořte soubor pojmenovaný main.go následujícím kódem Go:

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())
    }
}

Spusťte aplikaci:

go run main.go

Očekávaný výstup:

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)
  ...

Vložte řádek

Přidejte následující funkci do main.go a zavolejte ji z 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

Ovladač go-mssqldb nepodporuje LastInsertId(). Zavolání vrátí chybu. Použijte klauzuli OUTPUT nebo samostatný SELECT SCOPE_IDENTITY() dotaz k získání vložené hodnoty identity.

Použití ověřování SQL

Chcete-li se připojit pomocí ověřování serveru SQL Server místo ověřování systému Windows, změňte připojovací řetězec. Pro všechny formáty a možnosti připojovací řetězec viz Connection strings.

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

Použijte Microsoft Entra ID

Pokud se připojujete k Azure SQL Database, Azure SQL Managed Instance nebo SQL databázi ve Fabric, začněte s Use go-mssqldb with Azure SQL Database. Příklad v této sekci ukazuje pouze minimální změny kódu požadované v main.go.

Pro autentizaci pomocí Microsoft Entra ID importujte azuread balíček:

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

Pak použijte název ovladače azuresql a přidejte fedauth ho do připojovací řetězec. Pro všechny možnosti Microsoft Entra viz Microsoft Entra ID autentizace.

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