2011-04-18 120 views
14

我最近與我一起工作的一位同事告訴我,SQL Express和MS Access本質上是一回事;這似乎不是一個準確的說法。我知道你可以將Access轉換爲一個SQL數據庫,並且可能在它們類似的地方,但我會認爲SQL數據庫引擎和用於運行訪問的內容並不相同。不僅如此,但SQL語句的語法等我知道是不一樣的。SQL Server Express vs MS Access

我主要想了解讓我更多地瞭解該版本。

回答

38

恩,不,不一樣。

首先,我需要澄清一些術語。 MS Access是一款快速應用程序開發(RAD)工具,可讓您快速構建與關係數據綁定的表單和報表。它帶有一個基於文件的數據庫引擎(Jet/ACE)。

訪問RAD工具可以與許多不同的後端數據庫(噴氣時,SQL Server,任何支持ODBC數據庫等)一起使用。我必須假設你的同事特別評論了Jet/ACE,即MS Access使用的數據庫引擎。

我覺得Jet/ACE database engineMS SQL Server Express之間的一個最大區別是,噴氣/ ACE是基於文件的SQL Server Express的使用客戶端/服務器模式。這意味着SQL Server Express需要一個正在運行的服務來提供對數據存儲的訪問。這可能會使某些情況下的部署複雜化。

SQL Server Express實際上只是SQL Server的限制版本:最大數據庫大小爲4GB(2008R2爲10GB),僅使用單個物理CPU等。這些限制是爲了防止大型組織使用免費提供的Express版本代替完整的SQL Server安裝。結果是SQL Server Express爲SQL Server提供了一個真正無縫升級的途徑。這也是(一般來說)一個更強大和功能齊全的數據庫管理系統,然後Jet/ACE。

相似

  • 關係數據庫管理系統
  • 寫入由Microsoft

差異

  • 的MS Access
    • 基於文件的
    • 免費分發的運行時(2007或更高版本)
    • RAD工具(表單/報表設計器)
    • 使用Jet SQL
    • 最大文件大小2GB
  • SQL Server Express的
    • 客戶機/服務器型號
    • 免費
    • 沒有RAD工具
    • 使用的Transact-SQL
    • 最大數據庫大小4GB(10GB爲SSE ​​R2),最大一個物理CPU
+3

值得注意的是,SQL Server允許你創建觸發器和存儲過程,而Jet/ACE則不能。雖然可以使用ADO(ActiveX數據對象)在VBA代碼中對它們進行操作,但MS Access(作爲RAD工具)並非真正用於編輯或執行存儲過程。 – HK1 2011-04-19 18:16:09

+1

儘管我沒有機會使用它們,但Access 2010引入了「[數據宏](http://blogs.office.com/b/microsoft-access/archive/2009/08/13/access-2010 -data-macros-similar-to-triggers.aspx)「,它們與SQL Server中的觸發器類似。 – mwolfe02 2011-04-19 20:47:55

+0

實際上,表級數據宏與觸發器並不相似,但它們可以用來實現與觸發器相同的操作。它們也可以用於其他目的。 – 2011-04-26 02:57:22

1

我想你的同事想到的是SQL Server CE,這是一個超輕量級的嵌入式數據庫,在數據庫管理方面它仍然(IMO)遠遠優於Access。 SQL Express甚至不能與Access進行比較而不會冒犯前者。

+0

那麼,SQL服務器的精簡版沒有存儲過程或表觸發器,而默認的Access數據引擎現在可以。因此,並不是一個滿貫的扣籃,因此像服務器數據引擎(ACE)這樣的進程內數據引擎的緊湊版sql服務器也不是一種服務,因此需要辯論。 – 2011-04-19 08:05:22

+0

或者SQLite vs Access – skan 2013-09-13 17:02:33

0

這裏有兩種產品數據表,所以你可以看到在兩個數據庫之間的差別一些確鑿的事實。

訪問: http://office.microsoft.com/en-us/access-help/access-specifications-HP005186808.aspx

SQL(特快列在最右列): http://www.microsoft.com/sqlserver/2008/en/us/editions-compare.aspx

的評論我一直讀的是Access是偉大的單用戶單次訪問的數據庫使用過程中,一分鐘你的規模超出了單一的用戶看別處。儘管這可能是一個「小小」,但Access在多用戶環境中確實不太好。根據經驗,我們有一位客戶忽略並忽略了將後端數據庫從Access遷移到SQL的請求,並且有很多場合我們不得不從備份進行恢復,或者由於損壞使Access數據庫脫機。

他們是兩個不同的目標市場,兩種完全不同的技術。數據庫引擎確實不同,正如您提到的T-SQL與Access SQL不同。

你可以在「擴展」的Access數據庫通過創建SSIS包或其他工具進行導入到SQL,但是這需要訪問架構和數據,並將其遷移到真正的SQL數據庫。它不僅僅是附加Access數據庫等。

任何時候你需要一個「真正」的數據庫中,我會強烈建議在尋找任何可用在訪問SQL版本。

+3

Access/Jet/ACE無法處理多個用戶的想法是可笑的。我所有使用Jet/ACE後端的客戶都有多個用戶同時訪問數據存儲。如果您的應用程序不適用於多個用戶,那麼它就是您的錯誤,而不是Access的。 – 2011-04-26 02:58:53

+3

並失去「'真正'數據庫'的術語。它使你看起來像一個無知的反訪問偏執。 – 2011-04-26 02:59:22

0

只要記住,與MS-訪問你不如果您正確玩牌,則會有尺寸限制。例如,沒有理由不在每個數據庫中包含許多2到4千兆字節的表。您的ODBC應用程序可以打開到多個MS-Access數據庫的連接,並查詢每個數據庫中的單個表。因此,您可以擁有一個包含數萬億記錄的數據庫,存儲在多個MDB文件中。我去過的一家公司使用單一的MS-Access數據庫來運行在MS-Access表單中完成的問題跟蹤系統。他們一次只能使用一個人,因爲共享問題會導致MS-Access鎖定。我在數據庫中編寫了一個Win32 Perl本地Windows GUI用戶界面,這個界面在字段/記錄驗證方面更好,而且我的ODBC代碼能夠管理用於同時用戶訪問的連接。我通過我的Perl程序爲每個用戶管理數據庫的開放和讀寫。我沒有打開數據庫。我沒有爲每個用戶維護一個持久連接,而只是保持足夠長的連接來檢索記錄以進行編輯。然後我關閉連接,直到將記錄寫回數據庫。另外,我通過維護包含用戶當前正在編輯的記錄的記錄標識的用戶登錄表來編寫自己的記錄鎖定程序邏輯,然後在不再編輯該記錄時刪除該記錄。當另一個用戶去編輯相同的記錄時,程序檢查該記錄是否當前打開供其他用戶編輯。該系統完美無瑕。 MS-Access從未鎖定通過ODBC和多用戶訪問。我甚至在編譯好的Perl程序中將密碼嵌入到數據庫中,以便除了通過Perl程序以外,沒有人能夠訪問Access數據庫中的數據。