2013-07-23 4 views
1

Вечерние всеОшибка синтаксиса рядом с ScanID

Я работаю над небольшим приложением, но застрял в ограничении внешнего ключа SQLite. В основном то, что я имею один «HostLookuptable», как

CREATE TABLE tblHostLookup ( 
HostID INTEGER PRIMARY KEY AUTOINCREMENT, 
HostName TEXT); 

И один «ScanLookuptable», как

CREATE TABLE tblScanLookup ( 
ScanID INTEGER PRIMARY KEY AUTOINCREMENT, 
ScanDate TEXT); 

Тогда есть еще одна таблица, которая будет иметь отображение между двумя таблицами, как «ScanHistorytable»

CREATE TABLE tblScanHistory (
ScanHistoryID INTEGER PRIMARY KEY AUTOINCREMENT, 
HostID INTEGER, 
FOREIGN KEY(HostID) REFERENCES tblHostLookup(HostID), 
ScanID INTEGER, 
FOREIGN KEY(ScanID) REFERENCES tblScanLookup(ScanID)); 

Но я продолжаю получать сообщение об ошибке

Syntax error near ScanID 

Почему так? Разве нам не разрешено иметь более одного внешнего ключа в таблице? Любая помощь в этом отношении будет отличной.

Благодаря

+0

Если это внешний ключ ограничения, то попробуйте удалить внешний ключ НомерУзла и посмотреть, что происходит. –

+0

@MarcB Он отлично работает с одним внешним ключом ... но нам серьезно не разрешено иметь более одного внешнего ключа? – user9517536248

+0

Не видите ничего о ограничениях числа FK (http://www.sqlite.org/foreignkeys.html), поэтому, возможно, начните искать, есть ли там какие-то невидимые символы, которые могут вызвать ошибку синтаксического анализа, например. после первой строки внешнего ключа HostID. попробуйте повторно создать весь запрос создания заново. –

ответ

1

Вы не можете смешивать столбцы таблицы и ограничения таблицы; ограничения должны быть перечислены после всех столбцов:

CREATE TABLE tblScanHistory (
    ScanHistoryID INTEGER PRIMARY KEY AUTOINCREMENT, 
    HostID INTEGER, 
    ScanID INTEGER, 
    FOREIGN KEY(HostID) REFERENCES tblHostLookup(HostID), 
    FOREIGN KEY(ScanID) REFERENCES tblScanLookup(ScanID) 
); 

Или, проще:

CREATE TABLE tblScanHistory (
    ScanHistoryID INTEGER PRIMARY KEY AUTOINCREMENT, 
    HostID INTEGER REFERENCES tblHostLookup(HostID), 
    ScanID INTEGER REFERENCES tblScanLookup(ScanID) 
); 
+0

Спасибо, много человек ... это сработало странно, хотя я думал, что каждый столбец должен оставаться с его внешним ключом ... тем не менее, для его очистки – user9517536248

+0

Во второй форме FKs * do * оставайтесь со своими столбцами. Чтобы задать вопрос, используйте кнопку «Задать вопрос». –

+0

Спасибо за помощь ... не беспокойтесь о другом вопросе, который я сам решил – user9517536248

Смежные вопросы