是否可以从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),
)
答案 0 :(得分:5)
如果列是合适的候选键,则只能使用列作为外键约束中的引用。
来自联机丛书:
FOREIGN KEY约束不必仅链接到PRIMARY 另一个表中的KEY约束;它也可以定义为参考 另一个表中UNIQUE约束的列。
在您的情况下,tgl_lahir
既不是唯一的,也不是主要的,因此无法在您的外键约束中使用。
如果您向tgl_lahir
添加唯一约束,它应该有效;是否可以使用您的数据是真正的问题。
答案 1 :(得分:3)
penduduk.tgl_lahir
列需要定义为外键约束引用的primary key或unique constraint。
答案 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),
)