Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- Ve a la 1.25 o más tarde
- Acceso a un punto final compatible con SQL Server. El ejemplo principal asume una instancia local de SQL Server en Windows.
- La
AdventureWorks2025base de datos de ejemplo. Para las instrucciones de descarga y restauración, consulta bases de datos de ejemplo de AdventureWorks.
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/azuready usa el nombre del controladorazuresql. Para detalles sobre el flujo de credenciales, véase autenticación de Microsoft Entra ID.
Creación de un proyecto de Go
Crea e inicializa un nuevo directorio:
mkdir go-sql-quickstart cd go-sql-quickstart go mod init go-sql-quickstartInstala 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")