Невозможно создать таблицу в SQL Compact с внешним ключом - PullRequest
1 голос
/ 30 июля 2011

Впервые использую эту базу данных, потому что мне нужен переносимый тип, и до сих пор это была головная боль.Кажется, я не могу понять, что не так с кодом.

Вот то, что я пытаюсь запустить - это на испанском, но вы понимаете суть:

create table UsuarioRol
(
UsuarioRolId int primary key identity(1,1),
Nombre nvarchar(64) not null,
NivelAutoridad int not null
)

create table Usuario
(
UsuarioId int primary key identity(1,1),
UsuarioRolId int foreign key references UsuarioRol(UsuarioRolId),
Login nvarchar(64) not null,
Password nvarchar(64) not null
)

Iполучить ошибку:

--------------------------- Microsoft Visual Studio --------------------------- Ошибка выполнения SQL.

Выполненный оператор SQL: создать таблицу UsuarioRol

(

UsuarioRolId int первичный ключ удостоверения (1,1),

Nombre nvarchar (64) не ноль,

NivelAutoridad int не нуль

)

создать таблицуUsuario

(

Идентификатор первичного ключа UsuarioId int (1,1) ,,

Ссылки внешнего ключа UsuarioRolId int Usua ... Источник ошибки: SQL Server Compact ADO.NETСообщение об ошибке поставщика данных: произошла ошибка при разборе запроса. [Номер строки токена = 8, Смещение строки токена = 1, Ошибка токена = создать]

--------------------------- Справка OK

Я не понимаю, что может быть не так в синтаксисе.что-то здесь?

Даже пробовал это, и я получаю ту же ошибку.

Запуск точно такой же TSQL на обычной старой базе данных SQL Server, отлично работает.

МожетЯ пришел к выводу, что SQL Compact не поддерживает внешние ключи?

Ответы [ 3 ]

3 голосов
/ 30 июля 2011

Я не уверен, поддерживается ли этот синтаксис в SQL Server CE. Должно работать следующее:

create table UsuarioRol
(
UsuarioRolId int primary key identity(1,1),
Nombre nvarchar(64) not null,
NivelAutoridad int not null
);
GO

create table Usuario
(
UsuarioId int primary key identity(1,1),
UsuarioRolId int,
Login nvarchar(64) not null,
Password nvarchar(64) not null
)
GO

ALTER TABLE [Usuario] ADD CONSTRAINT [FK_Usario_UsarioRol]
    FOREIGN KEY ([UsuarioRolId]) REFERENCES [UsuarioRol]([UsuarioRolId]);
GO

Обновление:

На самом деле то, что у вас должно работать, просто удалите «внешний ключ» в синтаксисе:

create table UsuarioRol
(
UsuarioRolId int primary key identity(1,1),
Nombre nvarchar(64) not null,
NivelAutoridad int not null
);
GO

create table Usuario
(
UsuarioId int primary key identity(1,1),
UsuarioRolId int references UsuarioRol(UsuarioRolId),
Login nvarchar(64) not null,
Password nvarchar(64) not null
);
GO

Или это также должно работать:

create table UsuarioRol
(
UsuarioRolId int primary key identity(1,1),
Nombre nvarchar(64) not null,
NivelAutoridad int not null
);
GO

create table Usuario
(
UsuarioId int primary key identity(1,1),
UsuarioRolId int,
Login nvarchar(64) not null,
Password nvarchar(64) not null,
foreign key (UsuarioRolId) references UsuarioRol (UsuarioRolId)
);
GO

Источник: http://msdn.microsoft.com/en-us/library/ms173393(v=SQL.110).aspx

0 голосов
/ 30 июля 2011

Не это,

UsuarioRolId int foreign key references UsuarioRol(UsuarioRolId),

но это.

UsuarioRolId int references UsuarioRol(UsuarioRolId),
0 голосов
/ 30 июля 2011

С SQl Server Compact вы можете одновременно выполнять только одну инструкцию, поэтому в зависимости от используемого вами инструмента вы должны как минимум разделиться с GO и новой строкой.

...