本文為三部曲最終篇,建立在基礎與中階文章概念之上,專注於多使用者環境中最常見的 SQL 語法與技巧。讀完前兩篇並掌握本文內容,您將具備全方位運用 Jet SQL 的能力。
Jet 4.0 引入了許多接近 SQL Server 的功能,支援:
BEGIN TRANSACTION、COMMIT、ROLLBACK,確保 ACID 特性。LOCK TABLE、SELECT ... WITH OWNERACCESS OPTION)。| 特性 | Jet 4.0 | MSDE 2000 |
|---|---|---|
| 最大資料庫大小 | 2 GB | 2 GB |
| 並發使用者建議上限 | ~255 | ~5-25 (工作負載相關) |
| 預存程序/觸發器 | 支援 (Jet 4.0 新增) | 完整支援 |
| 複寫 | 支援 | 支援 |
| 安全性模型 | 使用者/群組權限 | SQL Server 角色型安全性 |
選擇建議:單機/小型工作群組用 Jet;需擴展性、企業級安全性或未來升級 SQL Server 則選 MSDE。
SELECT *,明確列出所需欄位。Jet 4.0 支援 CREATE VIEW,可封裝複雜連接、篩選邏輯:
CREATE VIEW vw_OrderSummary AS
SELECT o.OrderID, c.CompanyName, o.OrderDate,
SUM(od.UnitPrice * od.Quantity * (1 - od.Discount)) AS TotalAmount
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID
INNER JOIN [Order Details] od ON o.OrderID = od.OrderID
GROUP BY o.OrderID, c.CompanyName, o.OrderDate;
Jet 4.0 引入 CREATE PROCEDURE,支援輸入/輸出參數與傳回值:
CREATE PROCEDURE sp_GetOrdersByDate
@StartDate DATETIME,
@EndDate DATETIME,
@TotalCount LONG OUTPUT
AS
BEGIN
SELECT @TotalCount = COUNT(*) FROM Orders
WHERE OrderDate BETWEEN @StartDate AND @EndDate;
SELECT OrderID, CustomerID, OrderDate, ShippedDate
FROM Orders
WHERE OrderDate BETWEEN @StartDate AND @EndDate
ORDER BY OrderDate DESC;
END;
Jet 使用「工作群組資訊檔」(System.mdw) 管理使用者/群組與權限:
CREATE USER、CREATE GROUP(需 ADOX 或 DAO 程式碼)。GRANT SELECT, INSERT ON TableName TO UserOrGroup。REVOKE DELETE ON TableName FROM UserOrGroup。ALTER DATABASE PASSWORD 'newpwd' 'oldpwd'。最佳實務:採用「最小權限原則」,應用程式連線使用專用帳號,僅授予必要物件權限;避免使用 Admin 帳號執行日常操作。
SHOWPLAN 分析執行計畫;避免隱含轉換導致索引失效。TOP N ... WHERE PK > @LastPK 避免大量資料排序。掌握進階 Jet SQL,能讓 Access 應用在多使用者環境下穩定、高效運作。若專案規模持續成長,建議規劃遷移至 SQL Server/MSDE,以獲得更完整的企業級功能與擴展性。