SQL izveides tabulas sintakses kļūda ierobežojumā

Mēģinot izveidot dažas tabulas ar ierobežojumiem, esmu paklupis uz sintakses kļūdām. Es izmantoju Microsoft Access, un tā man pastāvīgi norāda, ka mans otrais ierobežojums ir nepareizs. Kas notiek? Mans kods izskatās šādi:

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 avots
comment
Es nezinu, ka MS Access atbalsta pārbaudes ierobežojumus: msdn.microsoft .com/en-us/library/office/.   -  person Gordon Linoff    schedule 03.12.2015
comment
Iespējamais Vai tas ir iespējams dublikāts lai izveidotu pārbaudes ierobežojumu piekļuvei un/vai DAO?   -  person Didier Aupest    schedule 03.12.2015


Atbildes (2)


Es uzskatu, ka jums ir jāizveido tabula un jāizmanto ALTER TABLE, lai pievienotu ierobežojumu.

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

Es nezinu, cik ļoti situācija ir mainījusies kopš Access 2000. Esmu diezgan pārliecināts, ka joprojām ir spēkā daži ierobežojumi, kā norādīts šajā vecajā dokumentācijā:

Piezīme Pārbaudes ierobežojuma paziņojumu var izpildīt, tikai izmantojot Jet OLE DB nodrošinātāju un ADO; tas atgriezīs kļūdas ziņojumu, ja to izmantos Access SQL View lietotāja interfeisā.

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

person shawnt00    schedule 03.12.2015

Jūsu CREATE TABLE priekšraksts ir derīgs Access DDL, kad tas tiek izpildīts no ADO/OleDb. CHECK ierobežojumi ir starp DDL līdzekļiem, kas pievienoti Jet 4 un kuri netiek atbalstīti saskaņā ar DAO.

Tas arī nozīmē, ka CHECK pēc noklusējuma netiek atbalstīts vaicājumiem, kas tiek izpildīti no vaicājumu noformētāja. Iespējams, varēsiet apiet šo ierobežojumu, iestatot piekļuves opciju "SQL Server saderīgā sintakse (ANSI 92)". Tomēr šai opcijai ir arī citas blakusparādības. Ja to izmantojat, noteikti pārbaudiet esošos vaicājumus, lai redzētu, vai tie joprojām darbojas, kā paredzēts.

Es ievietoju jūsu paziņojuma tekstu mainīgajā un veiksmīgi izpildīju to šādi:

CurrentProject.Connection.Execute strDDL

Tas strādāja, jo CurrentProject.Connection ir ADO objekts.

person HansUp    schedule 03.12.2015