Inicio rápido: Conéctate y consulta con go-mssqldb

En este inicio rápido, te conectas a una base de datos de SQL Server desde Go y ejecutas una consulta. Usas el go-mssqldb controlador con el paquete estándar database/sql .

Prerequisites

Para el ejemplo principal de este artículo, necesitas:

Si te conectas a Azure SQL en lugar de a una instancia local de SQL Server, usa go-mssqldb con Azure SQL Database para los requisitos previos y configuración específicos de Azure.

Elija el punto de partida.

El ejemplo principal de este artículo utiliza una instancia local de SQL Server en Windows con autenticación integrada. Utiliza las variantes de autenticación SQL o Microsoft Entra ID más adelante en este artículo si usas Linux o macOS, o si te conectas a Azure SQL.

  • Continúa en este artículo si quieres la muestra más pequeña de extremo a extremo contra SQL Server y puedes crear una base de datos de prueba local.
  • Si te conectas con un inicio de sesión de SQL Server en lugar de autenticación de Windows, continúa en este artículo y utiliza la variante de autenticación SQL más adelante.
  • Si te conectas a Azure SQL Database, Azure SQL Managed Instance o SQL Database en Fabric, empieza con Usa go-mssqldb con Azure SQL Database. Ese artículo trata sobre los requisitos de Azure TLS, los límites de conexión y la autenticación sin contraseña.
  • Si estás usando Microsoft Entra ID, importa github.com/microsoft/go-mssqldb/azuread y usa el nombre del controlador azuresql. Para detalles sobre el flujo de credenciales, véase autenticación de Microsoft Entra ID.

Creación de un proyecto de Go

  1. Crea e inicializa un nuevo directorio:

    mkdir go-sql-quickstart
    cd go-sql-quickstart
    go mod init go-sql-quickstart
    
  2. Instala el controlador:

    go get github.com/microsoft/go-mssqldb
    

Conexión y consulta

Crea un archivo llamado main.go con el siguiente 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())
    }
}

Ejecute la aplicación:

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

Insertar una fila

Añadir la siguiente función a main.go y llamarla desde 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

El go-mssqldb controlador no soporta LastInsertId(). Llamarlo devuelve un error. Utiliza una OUTPUT cláusula o una consulta separada SELECT SCOPE_IDENTITY() para recuperar un valor de identidad insertado.

Usar la autenticación de SQL

Para conectarse usando una autenticación de SQL Server en lugar de autenticación de Windows, cambia la cadena de conexión. Para conocer todos los formatos y opciones de las cadenas de conexión, véase Cadenas de conexión.

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

Uso de Microsoft Entra ID

Si te conectas a Azure SQL Database, Azure SQL Managed Instance o SQL Database en Fabric, empieza con Usa go-mssqldb con Azure SQL Database. El ejemplo de esta sección muestra solo los cambios mínimos de código requeridos en main.go.

Para autenticar usando Microsoft Entra ID, importa el azuread paquete:

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

Luego, usa el nombre del controlador azuresql y añade fedauth a la cadena de conexión. Para todas las opciones de Microsoft Entra, véase autenticación de Microsoft Entra ID.

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