Грешка в синтаксиса на SQL при създаване на таблица при ограничение

Докато се опитвах да създам някои таблици с ограничения, се натъкнах на синтактични грешки. Използвам Microsoft Access и той продължава да ме съветва, че второто ми ограничение е грешно. Какво става? Моят код изглежда по следния начин:

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 източник
comment
Не знам, че MS Access поддържа ограничения за проверка: msdn.microsoft .com/en-us/library/office/.   -  person Gordon Linoff    schedule 03.12.2015
comment
Възможен дубликат на Възможно ли е за създаване на ограничение за проверка в достъпа и/или DAO?   -  person Didier Aupest    schedule 03.12.2015


Отговори (2)


Вярвам, че трябва да създадете таблицата и да използвате 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.

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

person shawnt00    schedule 03.12.2015

Вашият израз CREATE TABLE е валиден Access DDL, когато се изпълнява от ADO/OleDb. CHECK ограниченията са сред DDL функциите, добавени с Jet 4 и които не се поддържат от DAO.

Това също означава, че CHECK не се поддържа по подразбиране за заявки, изпълнявани от дизайнера на заявки. Може да успеете да заобиколите това ограничение, като зададете опцията на Access „Синтаксис, съвместим със SQL Server (ANSI 92)“. Тази опция обаче има и други странични ефекти. Ако го използвате, не забравяйте да тествате съществуващите си заявки, за да видите дали всички те все още работят по предназначение.

Поставих текста на изявлението ви в променлива и го изпълних успешно по следния начин:

CurrentProject.Connection.Execute strDDL

Това проработи, защото CurrentProject.Connection е ADO обект.

person HansUp    schedule 03.12.2015