2015-12-03 61 views
1

嘗試創建一些帶約束的表時,我偶然發現了語法錯誤。我使用的是Microsoft Access,它不斷告訴我,我的第二個約束是錯誤的。到底是怎麼回事?我的代碼如下:SQL在約束條件下創建表語法錯誤

CREATE TABLE STORE 
(
StoreName Char(25) NOT NULL, 
City Char(35) NULL 
Country Char(50) NULL, 
Phone Char(8) NULL, 
Fax Char(15) NULL, 
Email Varchar(100) NULL, 
Contact Char(35) NULL, 
CONSTRAINT StorePK PRIMARY KEY(StoreName), 
CONSTRAINT Citizen CHECK (Country IN ('Belize', 'United States', 'Mexico','China', 'Germany', 'France', 'Netherlands')) 
); 
+0

我不知道MS Access支持檢查約束:https://msdn.microsoft.com/en-us/library/office/ff836971.aspx#sectionSection0。 –

+0

[可以在訪問和/或DAO中創建檢查約束嗎?](http://stackoverflow.com/questions/1660512/is-it-possible-to-create-a-check-constraint-在訪問和 - 或-DAO) –

回答

1

我相信你已經創建表和使用ALTER TABLE添加約束。

ALTER TABLE STORE 
CONSTRAINT Citizen CHECK (
    Country IN (
     'Belize', 'United States', 'Mexico','China', 
     'Germany', 'France', 'Netherlands' 
    ) 
); 

我不知道有多少的情況已經改變,因爲Access 2000中我敢肯定的是,一些限制仍然適用,因爲這老文檔中指出:

注意檢查約束語句只能通過Jet OLE DB提供程序和ADO執行;如果通過Access SQL View用戶界面使用 ,它將返回錯誤消息。從ADO/OleDb的執行時

https://msdn.microsoft.com/en-us/library/aa140015%28office.10%29.aspx#acintsql_ddlconst

1

CREATE TABLE語句有效訪問DDL。約束是Jet 4中添加的DDL功能之一,在DAO下不受支持。

這也意味着CHECK默認不支持從查詢設計器運行的查詢。您可以通過設置Access選項「SQL Server兼容語法(ANSI 92)」來解決該限制。但是,該選項有其他副作用。如果您使用它,請確保測試您現有的查詢以查看它們是否仍按預期運行。

我把你的語句文本中的變量,併成功執行這樣說:

CurrentProject.Connection.Execute strDDL 

這工作,因爲CurrentProject.Connection是ADO對象。