Quickstart: Verbinden und Abfrage mit go-mssqldb

In diesem Quickstart verbindest du dich mit einer SQL Server-Datenbank von Go aus und führst eine Abfrage aus. Du verwendest den go-mssqldb Treiber mit dem Standardpaket database/sql .

Prerequisites

Für das Hauptbeispiel in diesem Artikel benötigen Sie:

Wenn du dich mit Azure SQL statt einer lokalen SQL Server-Instanz verbindest, nutze Use go-mssqldb mit der Azure SQL-Datenbank für Azure-spezifische Voraussetzungen und Einrichtungen.

Auswählen des Startpunkts

Das Hauptbeispiel in diesem Artikel verwendet eine lokale SQL Server-Instanz unter Windows mit integrierter Authentifizierung. Verwenden Sie später in diesem Artikel die SQL-Authentifizierung oder Microsoft Entra ID-Varianten, wenn Sie Linux oder macOS nutzen oder sich mit Azure SQL verbinden.

  • Lesen Sie diesen Artikel weiter, wenn Sie die kleinste End-to-End-Probe gegen SQL Server möchten, und Sie können eine lokale Testdatenbank erstellen.
  • Wenn Sie sich mit einem SQL Server anstelle der Windows Authentication verbinden, lesen Sie diesen Artikel weiter und verwenden Sie später die SQL-Authentifizierungsvariante.
  • Wenn du dich mit Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Fabric verbindest, beginne mit Use go-mssqldb with Azure SQL-Datenbank. Dieser Artikel behandelt Azure-TLS-Anforderungen, Verbindungsgrenzen und passwortlose Authentifizierung.
  • Wenn du Microsoft Entra ID verwendest, importiere github.com/microsoft/go-mssqldb/azuread und verwende den azuresql Treibernamen. Für Details zum Zugangsdatenfluss siehe Microsoft Entra ID Authentifizierung.

Erstellen eines Go-Projekts

  1. Erstellen und initialisieren Sie ein neues Verzeichnis:

    mkdir go-sql-quickstart
    cd go-sql-quickstart
    go mod init go-sql-quickstart
    
  2. Installieren Sie den Treiber:

    go get github.com/microsoft/go-mssqldb
    

Verbinden und Abfragen

Erstelle eine Datei namens main.go mit dem folgenden Go-Code:

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

Führen Sie die Anwendung aus:

go run main.go

Erwartete Ausgabe:

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

Fügen Sie eine Reihe ein

Füge main.go die folgende Funktion hinzu und rufe sie in main() auf:

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

Von Bedeutung

Der Treiber go-mssqldb unterstützt LastInsertId()nicht . Das Aufrufen liefert einen Fehler. Verwenden Sie eine OUTPUT Klausel oder eine separate SELECT SCOPE_IDENTITY() Abfrage, um einen eingefügten Identitätswert abzurufen.

Verwenden Sie SQL-Authentifizierung

Um eine Verbindung mit einer SQL Server-Authentifizierung statt einer Windows Authentication herzustellen, ändern Sie die Verbindungszeichenfolge. Für alle Verbindungszeichenfolge-Formate und -Optionen siehe Connection strings.

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

Verwenden Sie Microsoft Entra ID

Wenn du dich mit Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Fabric verbindest, beginne mit Use go-mssqldb with Azure SQL-Datenbank. Das Beispiel in diesem Abschnitt zeigt nur die minimalen Codeänderungen, die in main.go erforderlich sind.

Zur Authentifizierung mit Microsoft Entra ID importieren Sie das azuread Paket:

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

Dann verwenden Sie den Treibernamen azuresql und fügen Sie fedauth der Verbindungszeichenfolge hinzu. Für alle Microsoft Entra-Optionen siehe Microsoft Entra ID-Authentifizierung.

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