在這個快速入門中,你會從 Go 連接到 SQL Server 資料庫並執行查詢。 你使用 go-mssqldb 驅動程式搭配標準 database/sql 套件。
先決條件
本文的主要範例需要:
- 升級到 1.25 或更高版本
- 存取與 SQL Server 相容的端點。 主要範例假設 Windows 上的本地 SQL Server 實例。
-
AdventureWorks2025範例資料庫。 如需下載與還原說明,請參閱 AdventureWorks 範例資料庫。
如果你是連接 Azure SQL 而非本地 SQL Server 實例,請使用 go-mssqldb 搭配 Azure SQL Database 來完成 Azure 專屬的前置條件和設定。
選擇你的起點
本文的主要範例使用了 Windows 上的本地 SQL Server 實例,並整合了認證功能。 如果你使用 Linux 或 macOS,或是連接 Azure SQL,請使用本文後面的 SQL 認證或 Microsoft Entra ID 變體。
- 如果你想要針對 SQL Server 的最小端對端範例,請繼續閱讀這篇文章,並且你可以建立本地測試資料庫。
- 如果你使用的是 SQL Server 登入而非 Windows 驗證,請繼續閱讀本文,稍後使用 SQL 認證變體。
- 如果你要連接 Azure SQL Database、Azure SQL 受控執行個體 或 Fabric 中的 SQL 資料庫,請先從 Use go-mssqldb with Azure SQL Database 開始。 那篇文章涵蓋了 Azure TLS 的要求、連線限制以及無密碼認證。
- 如果你用的是 Microsoft Entra ID,請匯入
github.com/microsoft/go-mssqldb/azuread並使用azuresql驅動程式名稱。 關於憑證流程的詳細資訊,請參見 Microsoft Entra ID 認證。
建立 Go 專案
建立並初始化一個新目錄:
mkdir go-sql-quickstart cd go-sql-quickstart go mod init go-sql-quickstart安裝驅動程式:
go get github.com/microsoft/go-mssqldb
連線並查詢
建立一個以以下 Go 代碼命名 main.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())
}
}
執行應用程式:
go run main.go
預期產出:
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)
...
插入一列
將以下函數加入 , main.go 並從 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
驅動 go-mssqldb 程式不支援 LastInsertId()。 呼叫它會回傳錯誤訊息。 使用 OUTPUT 子句或獨立 SELECT SCOPE_IDENTITY() 查詢來取得插入的身份值。
使用 SQL 驗證
若要使用 SQL Server 認證而非 Windows 驗證 連接,請更改 連接字串。 關於所有 連接字串 格式與選項,請參見 Connection strings。
connString := "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025"
使用 Microsoft Entra ID
如果你要連接 Azure SQL Database、Azure SQL 受控執行個體 或 Fabric 中的 SQL 資料庫,請先從 Use go-mssqldb with Azure SQL Database 開始。 本節的範例僅顯示在 main.go 中所需的最少程式碼變更。
要使用 Microsoft Entra ID 進行驗證,請匯入以下套件:azuread
import (
_ "github.com/microsoft/go-mssqldb/azuread"
)
然後使用 azuresql 驅動程式名稱,並將 fedauth 加入連線字串。 關於所有 Microsoft Entra 選項,請參見 Microsoft Entra ID 認證。
db, err := sql.Open("azuresql", "sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false")