Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
- Vai 1.25 ou mais tarde
- Acesso a um endpoint compatível com SQL Server. O exemplo principal assume uma instância local do SQL Server no Windows.
- A base de dados de
AdventureWorks2025exemplo. Para instruções de download e restauro, consulte bases de dados de exemplo AdventureWorks.
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/azureade use o nome do controladorazuresql. Para detalhes sobre o fluxo de credenciais, consulte autenticação do Microsoft Entra ID.
Criar um projeto Go
Crie e inicialize um novo diretório:
mkdir go-sql-quickstart cd go-sql-quickstart go mod init go-sql-quickstartInstale 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")