Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa guida introduttiva, ti connetterai a un database SQL Server da Go ed eseguirai una query. Usi il driver go-mssqldb con il pacchetto standard database/sql.
Prerequisiti
Per l'esempio principale di questo articolo, ti serve:
- Go 1.23 o versione successiva
- Accesso a un endpoint compatibile con SQL Server. L'esempio principale assume un'istanza locale di SQL Server su Windows.
- Il database di esempio
AdventureWorks2025. Per le istruzioni per download e ripristino, consulta i database di esempio di AdventureWorks.
Se ti connetti ad Azure SQL invece che a un'istanza locale di SQL Server, usa go-mssqldb con database SQL di Azure per i prerequisiti specifici di Azure e la configurazione.
Scegliere il punto di partenza
L'esempio principale in questo articolo utilizza un'istanza locale di SQL Server su Windows con autenticazione integrata. Usa le varianti dell'autenticazione SQL o Microsoft Entra ID più avanti in questo articolo se usi Linux o macOS, o se ti connetti ad Azure SQL.
- Continua in questo articolo se vuoi il campione end-to-end più piccolo contro SQL Server e puoi creare un database di test locale.
- Se ti connetti con un login SQL Server invece che con autenticazione di Windows, continua in questo articolo e usa la variante dell'autenticazione SQL più avanti.
- Se ti connetti a database SQL di Azure, Istanza gestita di SQL di Azure o SQL database in Fabric, inizia con Usa go-mssqldb con database SQL di Azure. Quell'articolo tratta i requisiti di Azure TLS, i limiti di connessione e l'autenticazione senza password.
- Se usi Microsoft Entra ID, importa
github.com/microsoft/go-mssqldb/azureade usa il nome del driverazuresql. Per dettagli sul flusso delle credenziali, vedi Microsoft Entra ID autenticazione.
Creare un progetto Go
Crea e inizializza una nuova directory:
mkdir go-sql-quickstart cd go-sql-quickstart go mod init go-sql-quickstartInstalla il driver:
go get github.com/microsoft/go-mssqldb
Connettersi ed eseguire interrogazioni
Crea un file chiamato main.go con il seguente codice 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())
}
}
Eseguire l'applicazione:
go run main.go
Output previsto:
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)
...
Inserisci una riga
Aggiungi la seguente funzione a main.go e chiamala da 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
Il driver go-mssqldb non supporta LastInsertId(). Quando lo si chiama, restituisce un errore. Usa una clausola OUTPUT o una query SELECT SCOPE_IDENTITY() separata per recuperare un valore di identità inserito.
Usare l'autenticazione SQL
Per connetterti usando un'autenticazione SQL Server invece di autenticazione di Windows, cambia la stringa di connessione. Per tutti i formati e le opzioni di stringa di connessione, vedi Connection strings.
connString := "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025"
Usa Microsoft Entra ID
Se ti connetti a database SQL di Azure, Istanza gestita di SQL di Azure o SQL database in Fabric, inizia con Usa go-mssqldb con database SQL di Azure. L'esempio in questa sezione mostra solo le modifiche minime di codice richieste in main.go.
Per autenticarti usando Microsoft Entra ID, importa il azuread pacchetto:
import (
_ "github.com/microsoft/go-mssqldb/azuread"
)
Poi usa il nome del azuresql driver e aggiunge fedauth alla stringa di connessione. Per tutte le opzioni di Microsoft Entra, vedi Microsoft Entra ID autenticazione.
db, err := sql.Open("azuresql", "sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false")