无法使用外键在SQL Compact中创建表

时间:2011-07-30 14:05:29

标签: sql tsql sql-server-ce

第一次使用这个数据库,因为我需要一个可移植的类型,到目前为止一直很头疼。我似乎无法弄清楚代码有什么问题。

这是我正在尝试运行的东西 - 它是西班牙文,但你得到了它的要点:

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
)

我收到错误:

  

--------------------------- Microsoft Visual Studio   --------------------------- SQL执行错误。

     

执行的SQL语句:create table UsuarioRol

     

     

UsuarioRolId int主键标识(1,1),

     

Nombre nvarchar(64)not null,

     

NivelAutoridad int not null

     

     

创建表Usuario

     

     

UsuarioId int主键标识(1,1),,

     

UsuarioRolId int外键引用Usua ...错误来源:SQL   Server Compact ADO.NET数据提供程序错误消息:出现错误   解析查询。 [令牌行号= 8,令牌行偏移= 1,令牌   错误=创建]

     

---------------------------确定帮助

我不明白语法中可能出现的问题。我在这里错过了什么吗?

即便尝试过,我也会遇到同样的错误。

在常规的'SQL Server数据库上运行完全相同的TSQL,运行完美。

我可以断定SQL Compact不支持外键吗?

3 个答案:

答案 0 :(得分:3)

我不确定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

答案 1 :(得分:0)

您只能使用SQl Server Compact一次运行一个语句,因此根据您使用的工具,您必须至少与GO和新行分开。

答案 2 :(得分:0)

不是这个,

UsuarioRolId int foreign key references UsuarioRol(UsuarioRolId),

但是这个。

UsuarioRolId int references UsuarioRol(UsuarioRolId),