Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
- Vá para a versão 1.25 ou posterior
- Acesso a um endpoint compatível com SQL Server. O exemplo principal assume uma instância local do SQL Server no Windows.
- O banco de dados de exemplo
AdventureWorks2025. Para instruções de download e restauração, veja bancos de dados de exemplo do AdventureWorks.
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/azureade use o nome de driverazuresql. Para detalhes sobre o fluxo de credenciais, veja 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 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")