SQL Məhdudiyyətdə Cədvəl Sintaksisi Xətası Yaradın

Məhdudiyyətlərlə bəzi cədvəllər yaratmağa çalışarkən sintaksis səhvləri ilə qarşılaşdım. Mən Microsoft Access-dən istifadə edirəm və o, mənə ikinci Məhdudiyyətimin səhv olduğunu bildirir. Nə baş verir? Kodum aşağıdakı kimi görünür:

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 mənbə
comment
MS Access-in yoxlama məhdudiyyətlərini dəstəklədiyini bilmirəm: msdn.microsoft .com/en-us/library/office/.   -  person Gordon Linoff    schedule 03.12.2015


Cavablar (2)


Hesab edirəm ki, siz cədvəl yaratmalı və məhdudiyyəti əlavə etmək üçün ALTER TABLE istifadə etməlisiniz.

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

Access 2000-dən sonra vəziyyətin nə qədər dəyişdiyini bilmirəm. Bu köhnə sənədlərdə göstərildiyi kimi bəzi məhdudiyyətlərin hələ də tətbiq olunduğuna tam əminəm:

Qeyd Yoxlama məhdudiyyəti bəyanatı yalnız Jet OLE DB provayderi və ADO vasitəsilə icra edilə bilər; Access SQL View istifadəçi interfeysi vasitəsilə istifadə edildikdə səhv mesajı qaytaracaq.

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

person shawnt00    schedule 03.12.2015

CREATE TABLE bəyanatınız ADO/OleDb-dən icra edildikdə etibarlı Access DDL-dir. CHECK məhdudiyyətlər Jet 4 ilə əlavə edilən və DAO altında dəstəklənməyən DDL xüsusiyyətləri arasındadır.

Bu həm də o deməkdir ki, CHECK sorğu tərtibatçısından icra edilən sorğular üçün standart olaraq dəstəklənmir. Siz Giriş seçimini "SQL Server Uyğun Sintaksis (ANSI 92)" təyin etməklə bu məhdudiyyəti aradan qaldıra bilərsiniz. Ancaq bu seçimin digər yan təsirləri də var. Əgər ondan istifadə edirsinizsə, onların hamısının hələ də nəzərdə tutulduğu kimi işlədiyini görmək üçün mövcud sorğularınızı sınaqdan keçirin.

Mən sizin bəyanat mətninizi dəyişənə qoydum və onu uğurla belə icra etdim:

CurrentProject.Connection.Execute strDDL

Bu işlədi, çünki CurrentProject.Connection ADO obyektidir.

person HansUp    schedule 03.12.2015