将外键指向datetime

时间:2013-05-09 12:49:56

标签: sql sql-server sql-server-2008

是否可以从datetime数据类型生成外键? 我试试这个,但我收到错误信息: Msg 1776,Level 16,State 0,Line 1 引用表'penduduk'中没有主键或候选键与外键'tgllahir'中的引用列列表匹配。 Msg 1750,Level 16,State 0,Line 1 无法创建约束。查看以前的错误。

我使用此查询

父母表:

create table penduduk (
no int identity(1,1),
noktp char(11) primary key,
nama varchar(20),
tgl_lahir datetime NOT NULL,
namahari varchar(20),
tgl int,
bulan int,
namabulan varchar(20),
tahun int,
umur int
)

CREATE TABLE tua(
noktp CHAR(11) PRIMARY KEY,
tgl_lahir datetime NOT NULL CONSTRAINT tgllahir FOREIGN KEY REFERENCES penduduk(tgl_lahir),
FOREIGN KEY(noktp) REFERENCES penduduk(noktp),
)

3 个答案:

答案 0 :(得分:5)

如果列是合适的候选键,则只能使用列作为外键约束中的引用。

来自联机丛书:

  

FOREIGN KEY约束不必仅链接到PRIMARY   另一个表中的KEY约束;它也可以定义为参考   另一个表中UNIQUE约束的列。

请参阅Foreign Key Constraints

在您的情况下,tgl_lahir既不是唯一的,也不是主要的,因此无法在您的外键约束中使用。

如果您向tgl_lahir添加唯一约束,它应该有效;是否可以使用您的数据是真正的问题。

答案 1 :(得分:3)

penduduk.tgl_lahir列需要定义为外键约束引用的primary keyunique constraint

SQLFiddle

答案 2 :(得分:0)

试试这个:

create table penduduk (
no int identity(1,1),
noktp char(11) primary key,
nama varchar(20),
tgl_lahir datetime NOT NULL unique,
namahari varchar(20),
tgl int,
bulan int,
namabulan varchar(20),
tahun int,
umur int
)

CREATE TABLE tua(
noktp CHAR(11) PRIMARY KEY,
tgl_lahir datetime NOT NULL CONSTRAINT tgllahir FOREIGN KEY REFERENCES penduduk(tgl_lahir),
FOREIGN KEY(noktp) REFERENCES penduduk(noktp),
)