我想添加一個外鍵給我的表,它給了我一個錯誤,引用有相同的數據類型,有什麼想法?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