2013-03-17 53 views
1

我正在使用MS Access 2010,並試圖使用SQL創建表。我想提出一些檢查約束,但我有一些麻煩:CREATE TABLE,檢查可能的文本值

CREATE TABLE Test (
tester Text CHECK (tester IN ('ABC', 'BCD', 'CDE')) 
); 

我得到一個語法錯誤,

有什麼建議?

謝謝!

編輯:對不起,如果我不清楚。我真正想要的是檢查測試儀是「ABC」,「BCD」還是「CDE」,這些都是他可以擁有的唯一值。

EDIT2:我試過別的東西:

CREATE TABLE Test (
tester Text NOT NULL, 
CONSTRAINT m_pk PRIMARY KEY(tester), 
CONSTRAINT check_tester CHECK (DATALENGTH(tester) > 2) 
); 

,我也得到一個語法錯誤。有沒有我真的不理解檢查文本值?我不可能看到其中哪一個是錯誤的。

+0

你究竟想達到什麼目的?是ABC,BCD,CDE種子數據,你需要確保文本永遠不會是NULL? – blamonet 2013-03-18 00:01:35

+0

我希望當我插入一條記錄時,它確保測試者的值是ABC,BCD,CDE。他只能擁有這些價值。 – Juicy 2013-03-18 00:03:41

+0

我明白你的意思了,也許NOT NULL在這裏沒有必要,因爲後面的CHECK,但即使沒有NOT NULL,我仍然得到語法錯誤 – Juicy 2013-03-18 00:04:49

回答

3

從Jet 4開始,CHECK約束支持從ADO執行的Access DDL,但不支持DAO。

可以執行其與約束創建表Test一個DDL語句。您不需要執行一條語句來創建表格,然後再執行另一條語句來添加約束。

CREATE TABLE Test 
    (
     tester TEXT(255), 
     CONSTRAINT ABC_or_BCD_or_CDE CHECK 
      (
       tester IN ('ABC', 'BCD', 'CDE') 
      ) 
    ); 

我格式化這種方式更容易檢查碎片。您可以使用此VBA執行語句:

strSql = "CREATE TABLE Test (tester Text(255)," & vbCrLf & _ 
    "CONSTRAINT ABC_or_BCD_or_CDE" & vbCrLf & _ 
    "CHECK (tester IN ('ABC', 'BCD', 'CDE')));" 
Debug.Print strSql 
CurrentProject.Connection.Execute strSql 

注:

  • CurrentProject.Connection是ADO對象,因此其.Execute方法成功。與CurrentDb.Execute(DAO方法)相同的語句會失敗。
  • 使用ADO,聲明一個字段爲TEXT,但不包含長度(tester TEXT而不是tester TEXT(255))會爲您提供一個備註字段。
2

您將需要對一個連接上運行:

ssql = "CREATE TABLE Test (tester Text)" 
CurrentProject.Connection.Execute ssql 

ssql = "ALTER TABLE test ADD CONSTRAINT " _ 
    & "myrule CHECK (tester IN ('ABC', 'BCD', 'CDE'))" 
CurrentProject.Connection.Execute ssql 

或者

sSQL = "CREATE TABLE Test (tester Text, " _ 
    & "CONSTRAINT myrule CHECK (tester IN ('ABC', 'BCD', 'CDE')))" 

注意,名稱,MyRule的在這種情況下,切不可已經存在,即使是不同的表。

一些注意事項:Is it possible to create a check constraint in access and/or DAO?

-1

我的壞, 看來MS Access不允許除主鍵和外鍵CHECK約束。我的老師直到去年才與Oracle教授她的課程,顯然沒有看到這在MS Access中無法完成。

+0

是的。請看我的答案,這是測試。此外我的社區還在此處註釋http://msdn.microsoft.com/en-us/library/office/bb177889(v=office.12).aspx – Fionnuala 2013-03-18 00:44:41