Mulai cepat: Menyambungkan dan mengkueri dengan go-mssqldb

Dalam panduan cepat ini, Anda menyambungkan ke basis data SQL Server dari Go dan menjalankan kueri. Anda menggunakan go-mssqldb driver dengan paket standar database/sql .

Prasyarat

Untuk sampel utama dalam artikel ini, Anda perlu:

Jika Anda terhubung ke Azure SQL alih-alih ke instans SQL Server lokal, gunakan Gunakan go-mssqldb dengan Azure SQL Database untuk prasyarat dan penyiapan khusus Azure.

Pilih titik awal Anda

Sampel utama dalam artikel ini menggunakan instans SQL Server lokal di Windows dengan autentikasi terintegrasi. Gunakan autentikasi SQL atau variasi Microsoft Entra ID nanti dalam artikel ini jika Anda menggunakan Linux atau macOS, atau jika Anda tersambung ke Azure SQL.

  • Lanjutkan dalam artikel ini jika Anda menginginkan sampel end-to-end terkecil terhadap SQL Server dan Anda dapat membuat database pengujian lokal.
  • Jika Anda terhubung dengan login SQL Server alih-alih Windows authentication, lanjutkan dalam artikel ini dan gunakan variasi autentikasi SQL nanti.
  • Jika Anda tersambung ke Azure SQL Database, Azure SQL Managed Instance, atau SQL database di Fabric, mulailah dengan Gunakan go-mssqldb dengan Azure SQL Database. Artikel tersebut mencakup persyaratan TLS Azure, batas koneksi, dan autentikasi tanpa kata sandi.
  • Jika Anda menggunakan Microsoft Entra ID, impor github.com/microsoft/go-mssqldb/azuread dan gunakan azuresql nama driver. Untuk detail alur kredensial, lihat autentikasi Microsoft Entra ID.

Membuat proyek Go

  1. Buat dan inisialisasi direktori baru:

    mkdir go-sql-quickstart
    cd go-sql-quickstart
    go mod init go-sql-quickstart
    
  2. Instal driver:

    go get github.com/microsoft/go-mssqldb
    

Sambungkan dan lakukan kueri

Buat file bernama main.go dengan kode Go berikut:

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

Jalankan aplikasi:

go run main.go

Output yang diharapkan:

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

Sisipkan baris

Tambahkan fungsi berikut ke main.go dan panggil dari: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

go-mssqldb Driver tidak mendukung LastInsertId(). Saat dipanggil, akan menghasilkan error. Gunakan OUTPUT klausa atau kueri terpisah SELECT SCOPE_IDENTITY() untuk mengambil nilai identitas yang dimasukkan.

Menggunakan autentikasi SQL

Untuk menyambungkan dengan menggunakan autentikasi SQL Server alih-alih Windows authentication, ubah string koneksi. Untuk semua format dan opsi string koneksi, lihat Connection strings.

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

Gunakan Microsoft Entra ID

Jika Anda tersambung ke Azure SQL Database, Azure SQL Managed Instance, atau SQL database di Fabric, mulailah dengan Gunakan go-mssqldb dengan Azure SQL Database. Contoh di bagian ini hanya menampilkan perubahan kode minimum yang diperlukan di main.go.

Untuk mengautentikasi dengan menggunakan Microsoft Entra ID, impor paket:azuread

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

Kemudian gunakan azuresql nama driver dan tambahkan fedauth ke string koneksi. Untuk semua opsi Microsoft Entra, lihat autentikasi Microsoft Entra ID.

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