Início Rápido: Conecte-se e consulte com go-mssqldb

Neste quickstart, você se conecta a um banco de dados do SQL Server a partir do Go e executa uma consulta. Você usa o driver go-mssqldb com o pacote padrão database/sql.

Prerequisites

Para o exemplo principal deste artigo, você precisa:

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

Escolha o ponto de partida

O exemplo principal deste 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 você estiver usando Linux ou macOS, ou se estiver se conectando ao SQL do Azure.

  • Continue neste artigo se quiser a menor amostra de ponta a ponta contra o SQL Server e assim poder criar um banco de dados de teste local.
  • Se você estiver se conectando com um login do SQL Server em vez da autenticação do Windows, continue neste artigo e use mais adiante a opção de autenticação SQL.
  • Se você está se conectando ao Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou Banco de Dados SQL no Fabric, comece com Usar go-mssqldb com Bando de Dados SQL do Azure. Esse artigo aborda os requisitos do Azure TLS, limites de conexão e autenticação sem senha.
  • Se você estiver usando o Microsoft Entra ID, importe github.com/microsoft/go-mssqldb/azuread e use o nome de driver azuresql. Para detalhes sobre o fluxo de credenciais, veja 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 arquivo nomeado 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 o aplicativo:

go run main.go

Resultado esperado:

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

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

Importante

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

Usar a autenticação do SQL

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

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

Usar Microsoft Entra ID

Se você está se conectando ao Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou Banco de Dados SQL no Fabric, comece com Usar go-mssqldb com Bando de Dados SQL do Azure. O exemplo nesta seção mostra apenas as mudanças 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"
)

Depois, use o nome do driver azuresql e adicione fedauth à string de conexão. Para todas as opções do Microsoft Entra, veja autenticação do Microsoft Entra ID.

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