SQL:n luontitaulukon syntaksivirhe rajoituksessa

Yrittäessäni luoda joitain rajoituksilla varustettuja taulukoita olen törmännyt syntaksivirheisiin. Käytän Microsoft Accessia ja se neuvoo minua jatkuvasti, että toinen rajoitukseni on väärä. Mitä tapahtuu? Koodini näyttää tältä:

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 lähde
comment
En ole tietoinen, että MS Access tukee tarkistusrajoituksia: msdn.microsoft .com/en-us/library/office/.   -  person Gordon Linoff    schedule 03.12.2015
comment
Mahdollinen kopio Onko se mahdollista luodaksesi tarkistusrajoituksen pääsyyn ja/tai DAO:han?   -  person Didier Aupest    schedule 03.12.2015


Vastaukset (2)


Uskon, että sinun on luotava taulukko ja käytettävä ALTER TABLE rajoitteen lisäämiseen.

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

En tiedä kuinka paljon tilanne on muuttunut Access 2000:n jälkeen. Olen melko varma, että joitain rajoituksia on edelleen voimassa, kuten tässä vanhassa dokumentaatiossa on mainittu:

Huomaa Tarkistusrajoituslause voidaan suorittaa vain Jet OLE DB -toimittajan ja ADO:n kautta. se palauttaa virheilmoituksen, jos sitä käytetään Access SQL View -käyttöliittymän kautta.

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

person shawnt00    schedule 03.12.2015

CREATE TABLE-lauseesi on kelvollinen Access DDL, kun se suoritetaan ADO/OleDb:stä. CHECK-rajoitukset ovat Jet 4:n mukana lisättyjä DDL-ominaisuuksia, joita ei tueta DAO:ssa.

Tämä tarkoittaa myös sitä, että CHECK ei ole oletuksena tuettu kyselyn suunnittelijalta suoritetuissa kyselyissä. Voit ehkä kiertää tämän rajoituksen asettamalla Access-vaihtoehdon "SQL Server Compatible Syntax (ANSI 92)". Tällä vaihtoehdolla on kuitenkin muita sivuvaikutuksia. Jos käytät sitä, muista testata olemassa olevia kyselyjäsi nähdäksesi, toimivatko ne edelleen tarkoitetulla tavalla.

Laitoin lausuntotekstisi muuttujaan ja suoritin sen onnistuneesti seuraavasti:

CurrentProject.Connection.Execute strDDL

Se toimi, koska CurrentProject.Connection on ADO-objekti.

person HansUp    schedule 03.12.2015