透過 SQL Server 瀏覽 Access

透過 SQL Server 瀏覽 Access

將您的資料從 Access 移轉至 SQL Server 之後,您現在會有用戶端/伺服器資料庫,它可能是內部部署或混合式 Azure 雲端解決方案。 無論是何種,Access 現在是展示層,而 SQL Server 為資料層。 現在是重新思考解決方案的各方面的好時機,特別是查詢效能、安全性和業務持續性,使得您可以改善並調整您的資料庫解決方案。

內部部署和雲端的 Access

當 Access 使用者第一次看到 SQL Server 和 Azure 文件時,可能會覺得害怕。 這催生了一份導覽指南,我們將帶您了解對您來說真正重要的部份。 一旦您完成此簡介,就可以準備探索資料庫中的進階技術,並進行較長的旅程。

本文內容

資料庫管理

推動業務持續性

SQL Server 安全性

處理隱私權問題

建立資料庫快照集

並行控制

查詢和相關

改善查詢效能

查詢的方式

新增索引鍵和索引

執行交易

使用限制式和觸發程序

資料類型

使用計算資料行

為您的資料加上時間戳記

管理大型物件

雜項

使用階層式資料

操控 JSON 文字



資源

推動業務持續性

針對您的 Access 解決方案,您想要讓它保持運作並只有些微的中斷,但您具有 Access 後端資料庫的選項會受到限制。 備份您的 Access 資料庫對保護資料來說不可或缺,但此動作需要讓使用者離線。 這麼一來,便會有因硬體/軟體維護升級、網路或電源中斷、硬體故障、安全性漏洞或甚至是網路攻擊所造成的非計劃停機。 若要將停機和對業務的影響降至最低,您可以在 SQL Server 資料庫使用中時將它備份。 此外,SQL Server 也提供高可用性 (HA) 及災害復原 (DR) 策略。 這兩項技術的結合稱為 HADR。 如需詳細資訊,請參閱商務持續性和資料庫復原使用 SQL Server 推動業務持續性 (電子書)

使用時進行備份

SQL Server 使用會在資料庫正在執行時進行的線上備份程序。 您可以執行完整備份、部份備份或檔案備份。 備份會複製資料和交易記錄檔,以確保還原作業完整。 尤其是在內部部署解決方案中,請注意簡單與完整復原選項之間的差異,以及它們如何影響交易記錄成長。 如需詳細資訊,請參閱復原模式

多數的備份作業會立即發生,檔案管理和壓縮資料庫作業除外。 相反地,如果您嘗試在備份作業進行時建立或刪除資料庫檔案,作業會失敗。 如需詳細資訊,請參閱備份概觀

HADR

達成高可用性和業務持續性的兩個最常見的方法為鏡像與叢集。 SQL Server 將鏡像與叢集技術與「AlwaysOn 容錯移轉叢集執行個體」和「AlwaysOn 可用群組」整合。

鏡像是資料庫層級持續性解決方案,利用維護待命資料庫、使用中資料庫在另一個硬體上的完整複本或鏡像來支援接近即時的容錯移轉。 它可以以同步 (高安全) 模式運作,其中的傳入交易會同時認可至所有伺服器,或是以非同步 (高效能) 模式運作,其中的傳入交易會認可至作用中資料庫,然後在某個預定的時間點複製到鏡像。 鏡像為資料庫層級的解決方案,並且僅適用使用完整復原模式的資料庫。

叢集為伺服器層級的解決方案,將伺服器結合成對使用者來說看似單一執行個體的單一資料存放區。 使用者會連線至執行個體,並且不需要知道執行個體中目前作用中的伺服器為何。 如果某個伺服器失敗或必須離線進行維護,使用者的體驗並不會改變。 叢集中的每個伺服器會受到叢集管理員使用活動訊號監視,讓它能夠在叢集中的作用中伺服器離線時偵測到,並嘗試順暢地切換到叢集中的下一個伺服器,不過在切換發生時,延遲時間會有所不同。

如需詳細資訊,請參閱 AlwaysOn 容錯移轉叢集執行個體AlwaysOn 可用性群組:高可用性和災害復原解決方案

頁面頂端

SQL Server 安全性

雖然您可以藉由使用信任中心以及加密資料庫來保護您的 Access 資料庫,SQL Server 有更進階的安全性功能。 讓我們看看 Access 使用者堅決要求的三個功能。 如需詳細資訊,請參閱保護 SQL Server 的安全

資料庫驗證

SQL Server 中有四個資料庫驗證方法,您可以在 ODBC 連線字串中指定每個方法。 如需詳細資訊,請參閱連結至或匯入 Azure SQL Server Database 中的資料。 每種方式都有其優點。

整合式 Windows 驗證    將 Windows 認證用於使用者驗證、安全性角色並限制使用者使用功能及資料。 您可以利用網域認證,並在應用程式中輕鬆管理使用者權限。 您可以選擇性地輸入服務主體名稱 (SPN)。 如需詳細資訊,請參閱選擇驗證模式

SQL Server 驗證    使用者需要使用他們在工作階段中第一次存取資料庫時,透過輸入登入識別碼和密碼在資料庫中設定的認證來連線。 如需詳細資訊,請參閱選擇驗證模式

Azure Active Directory 整合式驗證    使用 Azure Active Directory 連線至 Azure SQL Server 資料庫。 一旦您設定 Azure Active Directory 驗證之後,就不必額外輸入登入資訊與密碼。 如需詳細資訊,請參閱使用 Azure Active Directory 驗證連線至 SQL Database

Active Directory 密碼驗證    輸入登入名稱與密碼,使用在 Azure Active Directory 中設定的認證來連線。 如需詳細資訊,請參閱使用 Azure Active Directory 驗證連線至 SQL Database

提示    使用威脅偵測來接收異常資料庫活動的警示,該活動指出對 Azure SQL Server 資料庫具有潛在安全性威脅。 如需詳細資訊,請參閱 SQL Database 威脅偵測

應用程式安全性

SQL Server 有兩個應用程式層級的安全性功能,可供您用來搭配 Access 使用。

動態資料遮罩    對不具特殊權限的使用者將敏感性資訊遮罩以隱藏機密資訊。 例如,您可以將部份或完整社會安全號碼加上遮罩。

部分資料遮罩

部份資料遮罩

完整的資料遮罩

完整資料遮罩

您可以用幾個方式來定義資料遮罩,並且將資料遮罩套用到不同的資料類型。 資料遮罩為在資料表和資料行層級的原則導向,針對已定義的一組使用者,並且會即時套用至查詢。 如需詳細資訊,請參閱動態資料遮罩

資料列層級安全性    您可以使用資料列層級安全性,根據使用者特性來控制對包含敏感性資訊之特定資料庫資料列的存取。 資料庫系統會套用這些存取限制,因此這會使得安全性系統更可靠而強固。

SQL Server 資料列安全性

安全性述詞有兩個類型:

  • 篩選器述詞可篩選來自查詢的資料列。 此篩選器是透明的,並且使用者不會知道有使用篩選器。

  • 封鎖述詞可防止未經授權的動作,並且在動作無法執行時擲出例外狀況。

如需詳細資訊,請參閱資料列層級安全性

使用加密保護資料

保護待用資料、傳輸中的資料,以及使用中的資料,而不影響資料庫效能。 如需詳細資訊,請參閱 SQL Server 加密

待用加密    若要保護個人資料不在實體儲存層受到離線媒體攻擊,請使用待用加密,也稱為「透明資料加密 (TDE)」。 這表示即使實體媒體遭竊或未正確處置,您的資料也受到保護。 TDE 會執行資料庫、備份和交易記錄檔的即時加密及解密,而不需對您的應用程式進行任何變更。

傳輸中加密    若要保護不受窺探和「中間人攻擊」,您可以將在網路上傳輸的資料加密。 SQL Server 支援使用傳輸層安全性 (TLS) 1.2 以獲得高度安全的通訊。 表格式資料流 (TDS) 通訊協定也會用來保護不受信任網路上的通訊。

用戶端上使用中的加密    若要在使用時保護個人資料,Always Encrypted 會是您需要的功能。 個人資料會經過加密,並在用戶端電腦上使用驅動程式解密,而不需向資料庫引擎顯示加密金鑰。 如此一來,加密的資料只有負責管理該資料的人員才看得到,而不應具有存取的其他高度權限使用者看不到。 根據選取的加密類型,Always Encrypted 可能會限制部份資料庫功能,例如對加密的資料行進行搜尋、群組及索引。

頁面頂端

處理隱私權問題

隱私權疑慮非常廣泛,使得歐盟透過一般資料保護規定 (GDPR) 定義了法律要求。 幸好,SQL Server 後端即很適合用來回應這些要求。 考慮在三個步驟架構中實作 GDPR。

GDPR 程序包含三個步驟

步驟 1:評估和管理合規性風險

GDPR 要求您找出並盤點您在資料表和檔案中擁有的個人資訊。 此資訊可以是任何項目,從姓名、相片、電子郵件地址、銀行詳細資訊、社交網路網站上的文章、醫療資料或甚至是 IP 位址。

SQL Server Management Studio 中內建的新工具 SQL 資料探索和分類利用套用兩個中繼資料屬性至資料行,協助您探索、分類、加標籤並報告相關的敏感性資料:

  • 標籤    定義資料的敏感性。

  • 資訊類型    提供關於資料行中所儲存資料類型的其他細微度。

您可以使用的另一個探索機制是全文檢索搜尋,其中包含使用 CONTAINS 和 FREETEXT 述詞,以及資料列集值函數,例如 CONTAINSTABLE 和 FREETEXTTABLE 來與 SELECT 陳述式搭配使用。 使用全文檢索搜尋,您可以搜尋資料表以探索文字、文字組合或文字的變化 (如同義字或屈折形式)。 如需詳細資訊,請參閱全文檢索搜尋

步驟 2:保護​​個人資訊

GDPR 要求您保護個人資訊並限制對個人資訊的存取。 除了您採取用來管理網路與資源的標準步驟 (例如防火牆設定),您還可以使用 SQL Server 安全性功能來協助您控制資料存取:

  • SQL Server 驗證可管理使用者身分識別,並防止未經授權的存取。

  • 資料列層級安全性可根據使用者與該資料之間的關聯,來限制對資料表中資料列的存取。

  • 動態資料遮罩可限制個人資料曝光,方法是將個人資料遮罩避免對不具權限的使用者顯示。

  • 加密可確保個人資料在傳輸期間和儲存時受到保護,並且受到保護不遭入侵 (包括在伺服器端)。

如需詳細資訊,請參閱 SQL Server 安全性

步驟 3:有效回應要求

GDPR 要求您維護個人資料處理的記錄,並在主管機關要求時提供這些記錄。 如果發生包括資料意外釋出之類問題,保護控制項可讓您快速做出回應。 在需要報告時,必須快速提供資料。 例如,GDPR 要求在「發現個人資料外洩之後不晚於 72 小時」向主管機關報告。

SQL Server 2017 協助您以數個方式報告工作:

  • SQL Server 稽核可協助您確保會保存資料庫存取記錄並且處理活動存在。 它會執行可追蹤資料庫活動的微調稽核,以協助您了解並找出潛在威脅、可疑的不當使用或安全性違規。 您可以快速地執行資料鑑識。

  • SQL Server 時態性資料表是系統設定版本的使用者資料表,設計用來保持資料變更的完整歷程記錄。 您可以使用這些資料進行簡單的報告及時間點分析。

  • SQL 弱點評估可協助您偵測安全性和權限問題。 偵測到問題時,您可以也向下切入至資料庫掃描報告,以找出解決動作。

如需詳細資訊,請參閱建立信任平台 (電子書)GDPR 合規性的旅程

頁面頂端

建立資料庫快照集

資料庫快照集是 SQL Server 資料庫在某個時間點的唯讀靜態檢視。 雖然您可以複製一個 Access 資料庫檔案,以有效地建立資料庫快照集,Access 並沒有如同 SQL Server 的內建方法。 您可以使用資料庫快照集,用於根據建立資料庫快照集時的資料撰寫報表。 您也可以使用資料庫快照集來維護歷程記錄資料,例如,您用來彙總期間結束報表的每個季度財務報表各一個。 建議使用下列最佳做法:

  • 為快照集命名    每個資料庫快照集需要唯一的資料庫名稱。 在名稱中新增用途和時間範圍,以更易於識別。 例如,要在 24 小時制的一天上午 6:00 至下午 6:00 之間,以 6 小時的時間間隔取得 AdventureWorks 資料庫的快照三次,請將其命名為 AdventureWorks_snapshot_0600、AdventureWorks_snapshot_1200 和 AdventureWorks_snapshot_1800。

  • 限制快照集的數量    每個資料庫快照集會持續存在,直到將它明確卸除為止。 因為每個快照集將會繼續成長,您可以在建立新的快照集後,刪除較舊的快照集來節省磁碟空間。 例如,如果您要建立每日報告,請將資料庫快照集保留 24 小時,然後捨棄它並以新快照集取代。

  • 連線到正確的快照集    若要使用資料庫快照集,Access 前端需要知道正確的位置。 當您以新快照集取代現有的快照集時,您需要將 Access 重新導向至新的快照集。 將邏輯新增至 Access 前端,以確認您連線到正確的資料庫快照集。

以下說明您如何建立資料庫快照集:

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks_Data, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks_snapshot_0600' )  
AS SNAPSHOT OF AdventureWorks;  

如需詳細資訊,請參閱資料庫快照集 (SQL Server)

頁面頂端

並行控制

當許多人嘗試同時修改資料庫中的資料時,需要一個控制系統來讓某個人所做的變更不會對另一個人員的變更造成不良影響。 這稱為並行控制,並且有兩個基本的鎖定策略,即悲觀和樂觀。 鎖定可防止使用者以會影響其他使用者的方式修改資料。 鎖定也可幫助確保資料庫的完整性,尤其是可能會產生未預期結果的查詢。 Access 和 SQL Server 實作這些並行控制策略的方式有很重要的差異。

在 Access 中,預設的鎖定策略為樂觀,並且會將鎖定的擁有權授與嘗試寫入記錄的第一個人。 Access 會對嘗試同時寫入相同記錄的其他人顯示 [寫入衝突] 對話方塊。 若要解決衝突,其他人可以儲存記錄,將它複製到剪貼簿,或捨棄變更。

您也可以使用 RecordLocks 屬性來變更並行控制策略。 此屬性會影響表單、報表和查詢,並且有三個設定:

  • 無鎖定    在表單中,使用者可以嘗試同時編輯相同記錄,但可能會出現 [寫入衝突] 對話方塊。 針對報表,系統不會在有人預覽或列印報表時鎖定記錄。 針對查詢,系統不會在有人執行查詢時鎖定記錄。 這是 Access 實作樂觀鎖定的方式。

  • 所有記錄    如果有人執行以下動作,系統就會鎖定基礎資料表或查詢中的所有記錄:從表單檢視或資料工作表檢視中開啟表單、預覽或列印報表,或是執行查詢。 在鎖定期間,使用者可以讀取記錄。

  • 編輯的記錄    針對表單和查詢,系統會在使用者開始編輯記錄中的任何欄位時鎖定記錄頁面,直到使用者移至其他記錄為止。 因此,一筆記錄一次只能供一個使用者編輯。 這是 Access 實作悲觀鎖定的方式。

如需詳細資訊,請參閱寫入衝突對話方塊RecordLocks 屬性

在 SQL Server 中,並行控制的運作方式為:

  • 悲觀    在使用者執行會導致套用鎖定的動作之後,於擁有者將鎖定釋出之前,其他使用者皆無法執行會與鎖定衝突的動作。 此並行控制主要用於高度爭用資料的環境。

  • 樂觀    在樂觀並行存取控制中,使用者在讀取資料時不會鎖定資料。 當使用者更新資料時,系統會檢查以查看在讀取資料之後,是否有其他使用者變更了資料。 如果另一位使用者已更新資料時,即會引發錯誤。 一般而言,收到錯誤的使用者會復原交易並重新開始。 此並行控制主要用於低度爭用資料的環境。

您可以指定並行控制的類型,方法是選取數個交易隔離等級,其使用 SET TRANSACTION 陳述式,為來自其他交易的修改定義交易的保護層級:

 SET TRANSACTION ISOLATION LEVEL
 { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ  
    | SNAPSHOT
    | SERIALIZABLE
 }

隔離等級

描述

讀取未認可

隔離交易只是為了足以確保不會讀取實際上損毀的資料。

讀取已認可

交易可以讀取其他交易先前讀取的資料,而不需等待第一個交易完成。

可重複讀取

讀取及寫入鎖定會發生在選取的資料上,直到交易結束,但可能會發生虛設項目讀取。

快照集

使用資料列版本來提供交易層級讀取一致性。

可序列化

交易完全彼此隔離。

如需詳細資訊,請參閱交易鎖定和資料列版本設定指南

頁面頂端

改善查詢效能

在您的 Access 傳遞查詢可運作之後,利用 SQL Server 的精密方式可讓它更有效率地執行。

與 Access 資料庫不同,SQL Server 可提供平行查詢來讓具有多個微處理器 (CPU) 電腦的查詢執行和索引作業最佳化。 因為 SQL Server 可以使用多個系統背景工作執行緒同時執行查詢或索引,因此可以快速而有效率地完成作業。

查詢是改善您的資料庫解決方案整體效能的重要元件。 不正確的查詢會無限執行、逾時,並耗盡資源,例如 CPU、記憶體和網路搶匪。 這會阻礙重要商務資訊的可用性。 即使是一個錯誤的查詢也可能會導致資料庫嚴重的效能問題。

如需詳細資訊,請參閱使用 SQL Server 更快速查詢 (電子書)

查詢​​最佳化

數種工具共同搭配,能協助您分析查詢的效能並加以改善:查詢最佳化工具、執行計劃及查詢存放區。

查詢​​最佳化的運作方式

查詢最佳化工具

查詢最佳化工具是 SQL Server 最重要的元件。 使用查詢最佳化工具來分析查詢,並判斷存取所需資料的最有效率方式。 查詢最佳化工具的輸入包含查詢、資料庫結構描述 (資料表和索引定義),以及資料庫統計資料。 查詢最佳化工具的輸出是執行計劃。

如需詳細資訊,請參閱 SQL Server 查詢最佳化工具

執行計劃

執行計劃是一份定義,其中會排定要存取的來源資料表的順序,以及用來從每個資料表擷取資料的方法。 最佳化是從許多可能的計劃中選取一個執行計劃的程序。 每個可能的執行計劃使用的運算資源量方面會有相關聯的成本,並且查詢最佳化工具會選擇具有最低預估成本的計劃。

SQL Server 也必須根據資料庫中的變更情況動態調整。 查詢執行計劃中的迴歸可能大幅影響效能。 根據資料庫的新狀態,資料庫中的某些變更可能會導致執行計劃效率不佳或無效。 SQL Server 會偵測使得執行計劃無效的變更,並將該計劃標示為無效。

然後必須針對執行查詢的下一個連線重新編譯新計劃。 會使得計劃無效的情況包括:

  • 對查詢所參考的資料表或檢視表進行變更 (ALTER TABLE 和 ALTER VIEW)。

  • 對執行計劃使用的索引進行變更。

  • 執行計劃所使用統計資料的更新,透過陳述式 (例如 UPDATE STATISTICS) 明確產生,或是自動產生。

如需詳細資訊,請參閱執行計劃

查詢存放區

查詢存放區提供有關執行計劃選擇和效能的深入解析。 它利用協助您快速找出執行計劃變更所造成的效能差異來簡化效能疑難排解。 查詢存放區會收集遙測資料,例如查詢的歷程記錄、計劃、執行階段統計資料,以及等候統計資料。 使用 ALTER DATABASE 陳述式來實作查詢存放區:

ALTER DATABASE AdventureWorks2012 SET QUERY_STORE = ON;

如需詳細資訊,請參閱使用查詢存放區監控效能。

自動計劃校正

改善查詢效能最簡單的方法或許是使用「自動計劃校正」,這是 Azure SQL Database 隨附的功能。 您只需將它開啟,讓該功能運作。 它會持續執行執行計劃監控與分析、偵測發生問題的執行計劃,並自動修正效能問題。 自動計劃校正在背後使用學習、調整、驗證以及重複的四個步驟策略。

如需詳細資訊,請參閱自動調整

調適性查詢處理

只要升級至 SQL Server 2017,您也可以獲得更快速的查詢,因為它有一個稱為調適性查詢處理的新功能。 SQL Server 會根據執行階段特性來調整查詢計劃選項。

基數預估會估計在執行計劃的每個步驟中處理的資料列數量。 不準確的估計可能造成查詢回應時間變慢、不必要的資源使用 (記憶體、CPU 和 IO),以及減少的輸送量和並行。 有三個方法可用來適應應用程式工作負載特性:

  • 批次模式記憶體授與意見反應    較差的基數估計可能造成查詢「溢出磁碟」或耗用太多記憶體。 SQL Server 2017 會根據執行意見反應來調整記憶體授與,移除溢出磁碟,並針對重複查詢改善並行。

  • 批次模式調適性聯結    調適性聯結會在執行階段根據實際的輸入資料列,動態選取較好的內部聯結類型 (巢狀迴圈聯結、合併聯結或雜湊聯結)。 因此,計劃可以在執行期間動態切換到較佳的聯結策略。

  • 交錯式執行    多重陳述式資料表值函式傳統上被查詢處理視為黑色方塊。 SQL Server 2017 可以更完善地估計算資料列計數,以改善下游作業。

您可以為資料庫啟用 140 相容性層級,讓工作負載自動符合調適性查詢處理的資格:

ALTER DATABASE [YourDatabaseName] SET COMPATIBILITY_LEVEL = 140;

如需詳細資訊,請參閱 SQL 資料庫中的智慧型查詢處理

頁面頂端

查詢的方式

SQL Server 中的查詢有數種方式,並且各有其優點。 您想要知道這些方法為何,使得您可以為您的 Access 解決方案進行適當的選擇。 建立 TSQL 查詢的最佳方式是以互動方式編輯並使用 SQL Server Management Studio (SSMS) Transact-SQL 編輯器加以測試,該編輯器中含有 IntelliSense 可協助您選擇適當的關鍵字並檢查語法錯誤。

檢視表

在 SQL Server 中,檢視表就像是虛擬資料表,其中的檢視表資料來自一或多個資料表或其他檢視表。 不過,參考檢視表的方式就像查詢中的資料表。 檢視表可以隱藏查詢的複雜性,並透過限制資料列和資料集來協助保護資料。 以下是簡單檢視表的範例:

CREATE VIEW HumanResources.EmployeeHireDate AS  
SELECT p.FirstName, p.LastName, e.HireDate  
FROM HumanResources.Employee AS e JOIN Person.Person AS p  
ON e.BusinessEntityID = p.BusinessEntityID;

如需最佳效能以及若要編輯檢視表結果,請建立索引檢視表,它可如同資料表般持續保存在資料庫中,已為其配置儲存空間,並且可以如同任何資料表般加以查詢。 若要在 Access 中使用它,請以您連結至資料表的相同方式連結至檢視表。 以下是索引檢視表的範例:

CREATE VIEW Sales.vOrders  
WITH SCHEMABINDING  
AS  
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,  
        OrderDate, ProductID, COUNT_BIG(*) AS COUNT  
    FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o  
    WHERE od.SalesOrderID = o.SalesOrderID  
    GROUP BY OrderDate, ProductID;  

CREATE UNIQUE CLUSTERED INDEX IDX_V1   
    ON Sales.vOrders (OrderDate, ProductID);  

不過仍有限制。 如果受影響的基底資料表有多個,或檢視表包含彙總函數或 DISTINCT 子句,您就無法更新資料。 如果 SQL Server 傳回錯誤訊息,指出您不知道要刪除的記錄,您可能需要在檢視表上新增刪除觸發程序。 最後,您無法如同對 Access 查詢般使用 ORDER BY 子句。

如需詳細資訊,請參閱檢視表建立索引檢視表

預存程序

預存程序是一組一或多個 TSQL 陳述式,它會取得輸入參數、傳回輸出參數,並以狀態值指出成功或失敗。 它們可作為 Access 前端與 SQL Server 後端之間的中繼層。 預存程序可以如同 SELECT 陳述式一般簡單,或是如同任何程式一般複雜。 以下是範例:

CREATE PROCEDURE HumanResources.uspGetEmployees   
    @LastName nvarchar(50),   
    @FirstName nvarchar(50)   
AS   
    SET NOCOUNT ON;  
    SELECT FirstName, LastName, Department  
    FROM HumanResources.vEmployeeDepartmentHistory  
    WHERE FirstName = @FirstName AND LastName = @LastName  
    AND EndDate IS NULL;  

當您在 Access 中使用預存程序時,通常會以表單或報表的形式傳回結果集。 不過,它可能會執行不會傳回結果的其他動作,例如 DDL 或 DML 陳述式。 當您使用傳遞查詢,請確定您適當設定傳回記錄屬性。

如需詳細資訊,請參閱預存程序

通用資料表運算式

「通用資料表運算式 (CTE)」就像是會產生指定的結果集的暫存資料表。 只有在執行單一查詢或 DML 陳述式時它才會存在。 CTE 建置於與使用它的 SELECT 陳述式或 DML 陳述式相同的程式碼行中,在其中,建立和使用暫存資料表或檢視表通常是兩個步驟的程序。 以下是範例:

-- Define the CTE expression name and column list.  
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)  
AS  
-- Define the CTE query.  
(  
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear  
    FROM Sales.SalesOrderHeader  
    WHERE SalesPersonID IS NOT NULL  
)  
-- Define the outer query referencing the CTE name.  
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear  
FROM Sales_CTE  
GROUP BY SalesYear, SalesPersonID  
ORDER BY SalesPersonID, SalesYear;

CTE 有數個優點,包括下列:

  • 因為 CTE 是暫時性的,您不需要將它們建立為永久資料庫物件 (例如檢視表)。

  • 您可以在查詢或 DML 陳述式中參考相同 CTE 多次,使得您的程式碼更易於管理。

  • 您可以使用參考 CTE 的查詢來定義游標。

如需詳細資訊,請參閱 WITH common_table_expression

使用者定義函數

「使用者定義函數 (UDF)」可以執行查詢及計算,並傳回純量值或資料結果集。 它們就像是程式設計語言中的函式,會接受參數、執行動作 (例如複雜的計算),並傳回該動作的結果作為值。 以下是範例:

CREATE FUNCTION dbo.ISOweek (@DATE datetime)  
RETURNS int WITH SCHEMABINDING -- Helps improve performance
WITH EXECUTE AS CALLER  
AS  
BEGIN  
     DECLARE @ISOweek int;  
     SET @ISOweek= DATEPART(wk,@DATE)+1  
          -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104');  
-- Special cases: Jan 1-3 may belong to the previous year  
     IF (@ISOweek=0)   
          SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1   
               AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1;  
-- Special case: Dec 29-31 may belong to the next year  
     IF ((DATEPART(mm,@DATE)=12) AND   
          ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))  
          SET @ISOweek=1;  
     RETURN(@ISOweek);  
END;  
GO  
SET DATEFIRST 1;  
SELECT dbo.ISOweek(CONVERT(DATETIME,'12/26/2004',101)) AS 'ISO Week';  

UDF 具有特定限制。 例如,它們無法使用某些決定性系統功能,執行 DML 或 DDL 陳述式,或執行動態 SQL 查詢。

如需詳細資訊,請參閱使用者定義函數

頁面頂端

新增索引鍵和索引

無論您使用的資料庫系統為何,索引鍵和索引都會共同合作。

索引鍵

在 SQL Server 中,請確定您為每一個資料表建立主索引鍵,以及為每個相關資料表建立外部索引鍵。 SQL Server 中與 Access 自動編號資料類型對等的功能為 IDENTITY 屬性,可用來建立索引鍵值。 當您將此屬性套用至任何數值資料行時,它就會成為唯讀,並由資料庫系統維護。 當您在包含 IDENTITY 資料行的資料表中插入一筆記錄時,系統會從 1 開始自動遞增 IDENTITY 資料行的值 1,但您可以使用引數來控制這些值。

如需詳細資訊,請參閱 CREATE TABLE、IDENTITY (屬性)

索引

一如往常,索引的選項是在查詢速度與更新成本之間取得平衡的措施。 在 Access 中,您有一個類型的索引,但在 SQL Server 中,您有 12 個。 幸好,您可以使用查詢最佳化工具以協助您可靠地選擇最有效率的索引。 而在 Azure SQL 中,您可以使用自動索引管理 (自動調整的一項功能),它可為您建議要新增或移除索引。 與 Access 不同,您必須在 SQL Server 中為外部索引鍵建立自己的索引。 您也可以在索引檢視表上建立索引來改善查詢效能。 索引檢視表的缺點為會在檢視表的基底資料表中修改資料時增加額外的負荷,因為必須同時更新檢視表。 如需詳細資訊,請參閱 SQL Server 索引架構和設計指南索引

頁面頂端

執行交易

執行線上交易處理 (OLTP) 在使用 Access 時很困難,但在使用 SQL Server 時則相當簡單。 交易是單一工作單位,會在成功時認可所有資料變更,並在失敗時復原變更。 交易必須具備四個屬性,通常稱為 ACID:

  • 不可部分完成性    交易必須是工作的不可部分完成單位;亦即,執行其所有資料修改,或是均不執行。

  • 一致性    完成時,交易必須將所有資料保持在一致的狀態。 這表示已套用所有資料完整性。

  • 隔離性    並行交易進行的變更會與目前的交易隔離。

  • 耐用性    交易完成之後,變更會是永久的,即使系統失敗亦然。

您可以使用交易來確保所保證的資料完整性,例如 ATM 現金提款或薪資的自動存款。 您可以執行明確、隱含或批次範圍的交易。 以下是兩個 TSQL 範例:

-- Using an explicit transaction

BEGIN TRANSACTION;  
DELETE FROM HumanResources.JobCandidate  
    WHERE JobCandidateID = 13;  
COMMIT;  

-- the ROLLBACK statement rolls back the INSERT statement, but the created table still exists.

CREATE TABLE ValueTable (id int);  
BEGIN TRANSACTION;  
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
ROLLBACK;

如需詳細資訊,請參閱交易

頁面頂端

使用限制式和觸發程序

所有資料庫有其維護資料完整性的方法。

限制式

在 Access 中,您可以利用外部索引鍵與主索引鍵配對、串聯更新和刪除,以及驗證規則,在資料表關聯中強制參考完整性。 如需詳細資訊,請參閱資料表關聯指南使用驗證規則限制資料輸入

在 SQL Server 中,您會使用 UNIQUE 和 CHECK 限制式,這是在 SQL Server 資料表中強制執行資料完整性的資料庫物件。 若要驗證某個值在另一個資料表中有效,請使用外部索引鍵限制式。 若要驗證資料行中某個值在特定範圍內,請使用檢查限制式。 這些物件是您的防禦第一線,其設計可有效率地工作。 如需詳細資訊,請參閱唯一條件約束與檢查條件約束

觸發程序

Access 沒有資料庫觸發程序。 在 SQL Server 中,您可以使用觸發程序來強制執行複雜的資料完整性規則,並在伺服器上執行此商務邏輯。 資料庫觸發程序是當資料庫內發生特定動作時會執行的預存程序。 觸發程序是在新增或刪除資料表記錄之類事件時觸發,然後執行預存程序。 雖然 Access 資料庫可以在使用者嘗試更新或刪除資料時確保參考完整性,SQL Server 有一組精密的觸發程序。 例如,您可以將觸發程序設計為大量刪除記錄並確保資料完整性。 您甚至可以將觸發程序新增至資料表和檢視表。

如需詳細資訊,請參閱觸發程序 - DML觸發程序 - DDL設計 T-SQL 觸發程序

頁面頂端

使用計算資料行

在 Access 中,您可以建立計算結果欄,方法是將它新增至查詢並建置運算式,例如:

Extended Price: [Quantity] * [Unit Price]

在 SQL Server 中,此同等功能稱為計算資料行,它是虛擬的資料行,除非將該資料行標示為 PERSISTED,否則不會實際儲存在資料表中。 類似計算結果欄,計算資料行會在運算式中使用來自其他資料行的資料。 若要建立計算資料行,請將它新增至資料表。 例如:

CREATE TABLE dbo.Products   
(  
    ProductID int IDENTITY (1,1) NOT NULL  
  , QtyAvailable smallint  
  , UnitPrice money  
  , InventoryValue AS QtyAvailable * UnitPrice  
);  

如需詳細資訊,請參閱指定資料表中的計算資料行

頁面頂端

為您的資料加上時間戳記

有時候,您會新增資料表欄位,以記錄建立記錄時的時間戳記,使得您可以記錄該資料項目。 在 Access 中,您可以簡單地建立具有預設值 =Now() 的日期資料行。 若要在 SQL Server 中記錄日期或時間,請使用 datetime2 資料類型搭配預設值 SYSDATETIME()

注意事項    請避免將 rowversion 與將時間戳記新增至您的資料混淆。 時間戳記這個關鍵字為 SQL Server 中 rowversion 的同義字,但您應使用關鍵字 rowversion。 在 SQL Server 中,rowversion 是一種資料類型,它會公開資料庫內自動產生的唯一二進位數字,而且通常用作版本戳記資料表資料列的機制。 不過,rowversion 資料類型只是遞增數字,不會保留日期或時間,並且其設計並非用於為資料列加上時間戳記。

如需詳細資訊,請參閱 rowversion。 如需使用 rowversion 將記錄衝突減到最小的詳細資訊,請參閱將 Access 資料庫移轉至 SQL Server

頁面頂端

管理大型物件

在 Access 中,您可以使用附件資料類型來管理非結構化資料,例如檔案、相片和影像。 在 SQL Server 術語中,非結構化資料稱為 Blob (二進位大型物件),要使用它們有幾個方式:

FILESTREAM    使用 varbinary(max) 資料類型將非結構化資料儲存在檔案系統中,而不是資料庫中。 如需詳細資訊,請參閱使用 Transact-SQL 存取 FILESTREAM 資料

FileTable    將 Blob 儲存在名為 FileTables 的特殊資料表中,並提供與 Windows 應用程式的相容性,就好像它們是儲存在檔案系統中,而不需對您的用戶端應用程式進行變更。 FileTable 需要使用 FILESTREAM。 如需詳細資訊,請參閱 FileTables

遠端 BLOB 存放區 (RBS)    將二進位大型物件 (BLOB) 儲存在商業儲存解決方案中,而非直接儲存在伺服器上。 這可節省儲存空間,並減少硬體資源。 如需詳細資訊,請參閱二進位大型物件 (Blob) 資料

頁面頂端

使用階層式資料

雖然 Access 之類關聯式資料庫非常具有彈性,處理階層式關聯性為例外,且通常需要複雜的 SQL 陳述式或程式碼。 階層式資料的範例包括:組織架構、檔案系統、語言詞彙的分類法,以及網頁之間的連結圖。 SQL Server 具有內建的 hierarchyid 資料類型以及階層式函數,可輕鬆地儲存、查詢,以及管理階層式資料。

一般的階層

如需詳細資訊,請參閱階層式資料教學課程:使用 hierarchyid 資料類型

頁面頂端

操控 JSON 文字

JavaScript 物件標記法 (JSON) 是一種 Web 服務,它在非同步瀏覽器-伺服器通訊中以屬性-值組形式,使用人類可讀取的文字來傳輸資料。 例如:

{
"firstName": "Mary",
"lastName": "Contrary",
"spouse": null,
"age": 27
}

Access 沒有任何內建的方式可管理 JSON 資料,但在 SQL Server 中,您可以順利地儲存、索引、查詢以及擷取 JSON 資料。 您可以轉換 JSON 文字並將其儲存在資料表中,或將資料格式化為 JSON 文字資料。 例如,您可能想要為 Web 應用程式將查詢結果格式化為 JSON 格式,或是將 JSON 資料結構新增至資料列和資料行。

注意事項    VBA 中不支援 JSON。 作為替代方式,您可以在 VBA 中使用 XML,方法是使用 MSXML 程式庫。

如需詳細資訊,請參閱 SQL Server 中的 JSON 資料

頁面頂端

資源

現在是進一步了解 SQL Server 和 Transact SQL (TSQL) 的絕佳時機。 如您所見,它擁有類似 Access 的許多功能,但也有 Access 不具備的功能。 為了將您的簡介帶往下一個層級,以下是一些學習資源:

資源

描述

使用 Transact-SQL 查詢

影片式課程

資料庫引擎教學課程

關於 SQL Server 2017 的教學課程

Microsoft Learn

Azure 的實作學習

SQL Server 訓練及認證

成為專家

SQL Server 2017

主登陸頁面

SQL Server 文件

說明資訊

Azure SQL Database 文件

說明資訊

雲端中資料的基本指南 (電子書)

雲端概觀

SQL Server 2017 資料工作表

新功能的視覺摘要

比較 Microsoft SQL Server 版本

依版本的功能摘要

Microsoft SQL Server Express Editions

下載 SQL Server Express 2017

SQL 範例資料庫

下載範例資料庫

頁面頂端

增進您的 Office 技巧
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×