Início rápido: Ligue e faça consultas com go-mssqldb

Neste quickstart, liga-se a uma base de dados do SQL Server a partir do Go e executa uma consulta. Utiliza o controlador go-mssqldb com o pacote padrão database/sql.

Prerequisites

Para o exemplo principal deste artigo, precisa de:

Se estiver a ligar-se ao SQL do Azure em vez de uma instância local do SQL Server, consulte Utilizar o go-mssqldb com a Base de Dados SQL do Azure para ver os pré-requisitos e a configuração específicos do Azure.

Escolhe o teu ponto de partida

O exemplo principal neste artigo utiliza uma instância local do SQL Server no Windows com autenticação integrada. Use a autenticação SQL ou as variações do Microsoft Entra ID mais adiante neste artigo se estiver em Linux ou macOS, ou se estiver a ligar-se ao SQL do Azure.

  • Continue neste artigo se quiser a menor amostra de ponta a ponta contra o SQL Server e pode criar uma base de dados de teste local.
  • Se estiver a ligar-se com um login SQL Server em vez de Windows authentication, continue neste artigo e use a variação de autenticação SQL mais tarde.
  • Se estiver a ligar-se ao Base de Dados SQL do Azure, ao Azure SQL Managed Instance ou a uma base de dados SQL no Fabric, comece por usar go-mssqldb com Base de Dados SQL do Azure. Esse artigo aborda os requisitos do Azure TLS, limites de ligação e autenticação sem palavra-passe.
  • Se estiver a usar o Microsoft Entra ID, importe github.com/microsoft/go-mssqldb/azuread e use o nome do controlador azuresql. Para detalhes sobre o fluxo de credenciais, consulte autenticação do Microsoft Entra ID.

Criar um projeto Go

  1. Crie e inicialize um novo diretório:

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

    go get github.com/microsoft/go-mssqldb
    

Conectar e consultar

Crie um ficheiro denominado main.go com o seguinte código 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())
    }
}

Execute a aplicação:

go run main.go

Produção esperada:

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

Inserir uma linha

Adicione a seguinte função a main.go e chame-a de 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

O go-mssqldb driver não suporta LastInsertId(). Ao chamá-la, ocorre um erro. Use uma OUTPUT cláusula ou uma consulta separada SELECT SCOPE_IDENTITY() para recuperar um valor de identidade inserido.

Usar autenticação SQL

Para se ligar usando uma autenticação SQL Server em vez da Windows authentication, altere a cadeia de ligação. Para todos os formatos e opções de cadeia de ligação, veja Connection strings.

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

Utilize o Microsoft Entra ID

Se estiver a ligar-se ao Base de Dados SQL do Azure, ao Azure SQL Managed Instance ou a uma base de dados SQL no Fabric, comece por usar go-mssqldb com Base de Dados SQL do Azure. O exemplo nesta secção mostra apenas as alterações mínimas de código exigidas em main.go.

Para autenticar usando o Microsoft Entra ID, importe o azuread pacote:

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

Em seguida, usa o nome do controlador azuresql e adiciona fedauth à cadeia de ligação. Para todas as opções do Microsoft Entra, consulte autenticação do Microsoft Entra ID.

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