Eroare de sintaxă SQL Creare tabel la constrângere

În timp ce încercam să creez niște tabele cu constrângeri, am dat peste erori de sintaxă. Folosesc Microsoft Access și mă tot anunță că a doua mea constrângere este greșită. Ce se întâmplă? Codul meu arată astfel:

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'))
);

person ANewell_GO_PACK    schedule 03.12.2015    source sursă
comment
Nu știu că MS Access acceptă constrângeri de verificare: msdn.microsoft .com/en-us/library/office/.   -  person Gordon Linoff    schedule 03.12.2015
comment
Posibil duplicat al Este posibil pentru a crea o constrângere de verificare în acces și/sau DAO?   -  person Didier Aupest    schedule 03.12.2015


Răspunsuri (2)


Cred că trebuie să creați tabelul și să utilizați ALTER TABLE pentru a adăuga constrângerea.

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

Nu știu cât de mult s-a schimbat situația de la Access 2000. Sunt destul de sigur că unele limitări încă se aplică, așa cum este indicat în această documentație veche:

Notă Declarația de constrângere de verificare poate fi executată numai prin furnizorul Jet OLE DB și ADO; va returna un mesaj de eroare dacă este utilizat prin interfața de utilizator Access SQL View.

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

person shawnt00    schedule 03.12.2015

Declarația dvs. CREATE TABLE este validă Access DDL atunci când este executată din ADO/OleDb. Constrângerile CHECK se numără printre caracteristicile DDL adăugate cu Jet 4 și care nu sunt acceptate de DAO.

Aceasta înseamnă, de asemenea, că CHECK nu este acceptat în mod implicit pentru interogările executate de la designerul de interogări. Este posibil să puteți evita această limitare setând opțiunea Acces „Sintaxă compatibilă cu SQL Server (ANSI 92)”. Cu toate acestea, această opțiune are și alte efecte secundare. Dacă îl utilizați, asigurați-vă că testați interogările existente pentru a vedea dacă toate funcționează în continuare conform intenției.

Am pus textul declarației dvs. într-o variabilă și l-am executat cu succes astfel:

CurrentProject.Connection.Execute strDDL

Asta a funcționat deoarece CurrentProject.Connection este un obiect ADO.

person HansUp    schedule 03.12.2015