我想添加一个外键给我的表,它给了我一个错误,引用有相同的数据类型,有什么想法?SQL错误150外键
这里是我的代码:
CREATE TABLE order_task
(
order_number numeric (20) NOT NULL ,
order_sending_date TIMESTAMP,
order_profile_code varchar (20) NOT NULL ,
order_weight decimal (20.10) NOT NULL ,
order_piston_number numeric (1) NOT NULL
);
ALTER TABLE order_task ADD CONSTRAINT ord_num_dt_pk PRIMARY KEY (order_number , order_sending_date);
CREATE TABLE pre_product
(
pre_product_number numeric (5) NOT NULL ,
pre_product_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ,
pre_product_lenght_count numeric (5) NOT NULL ,
pre_product_rod_count numeric (5) NOT NULL,
pre_product_rod_lenght float (20) NOT NULL,
pre_product_weight float (20) NOT NULL,
pre_product_piston_number numeric (1) NOT NULL ,
pre_product_profile_code varchar (20) NOT NULL ,
pre_product_shift_number numeric (1) NOT NULL,
pre_product_employee varchar (40) NOT NULL ,
pre_product_scrap float (20) NOT NULL,
pre_product_scrap_percentage float (3,3) NOT NULL ,
pre_product_status varchar (40) NOT NULL,
pre_product_order_number numeric (20) NOT NULL ,
pre_product_order_date TIMESTAMP
);
ALTER TABLE pre_product ADD CONSTRAINT pp_num_date_pk PRIMARY KEY (pre_product_number,pre_product_date);
ALTER TABLE pre_product ADD CONSTRAINT pp_on_pp_fk FOREIGN KEY (pre_product_order_number)
REFERENCES order_task (order_number);
ALTER TABLE pre_product ADD CONSTRAINT pp_on_ot_fk FOREIGN KEY (pre_product_order_date)
REFERENCES order_task (order_sending_date);
当我尝试添加pre_product_order_date之间的外键和order_sending_date
什么是** exact **错误信息?你正在使用哪些DBMS?但是,在我知道的任何DBMS中,'decimal(20.10)'应该是'decimal(20,10)' –
对于sql-server:'timestamp'不应该用于存储日期。 “时间戳记数据类型只是一个递增的数字,并不保存日期或时间。要记录日期或时间,请使用日期时间数据类型。”请参阅:https://msdn.microsoft.com/en-us/library/ms182776(v=SQL.90).aspx。还有:“Transact-SQL时间戳数据类型与ISO标准中定义的时间戳数据类型不同。” https://msdn.microsoft.com/en-us/library/ms182776(v=sql.130).aspx。最后:“时间戳语法已被弃用,此功能将在未来版本的Microsoft SQL Server中删除。” – HoneyBadger
一个FK必须引用整个PK,在这个例子中是两列。 – jarlh