【发布时间】:2022-12-01 05:54:03
【问题描述】:
我在 SQL Server 上工作。
我创建了下表:
CREATE TABLE Payment(
Cust_ID CHAR(4),
Credit_Card_Number CHAR(16),
Payment_Number INTEGER,
Date DATE,
Fee MONEY,
PRIMARY KEY (Cust_ID, Credit_card_number, Payment_number))
ALTER TABLE Payment
ADD CONSTRAINT FK_CustPays
FOREIGN KEY (Cust_ID)
REFERENCES Customer(Cust_ID) ON DELETE CASCADE
;
ALTER TABLE Payment
ADD CONSTRAINT FK_CardPayment
FOREIGN KEY (Credit_Card_Number)
REFERENCES Credit_card(Credit_card_number) ON DELETE CASCADE
;
您可能会说,这是一个弱实体。我怀疑这就是为什么我不能使用 INSERT INTO 语句向其中插入值的原因,如下所示:
Insert into Payment(Payment_number,Date,Fee) Values ('918702','2016-08-12',93);
我得到错误
无法将值 NULL 插入“Cust_ID”列、表“DB139.dbo.Payment”;列不允许空值。插入失败。
我已经以这种方式成功地将数据插入到我的所有其他表中。唯一受此影响的 2 个表是其他 2 个弱实体(表 Savings_account 和 Checking_account)。如您所知,我没有包含任何 NULL 值,所以我不确定这个错误是关于什么的。
以下是另外 2 个弱实体,供参考(在“账户”表之后):
CREATE TABLE Account( Account_number CHAR(10), Balance MONEY, Name_of_bank VARCHAR(50), Date_of_creation DATE, PRIMARY KEY (Account_number)) ALTER TABLE Account ADD Account_number CHAR(16) CONSTRAINT FK_AccountNumberDouble FOREIGN KEY (Credit_card_number) REFERENCES Credit_card(Credit_card_number) ON DELETE CASCADE ; ALTER TABLE Account ADD Cust_ID CHAR(4) CONSTRAINT FK_CustIDTriple FOREIGN KEY (Cust_ID) REFERENCES Customer(Cust_ID) ; CREATE TABLE Savings_account( Account_number CHAR(10), Interest_rate INTEGER, PRIMARY KEY (Account_number)) ALTER TABLE Savings_account ADD CONSTRAINT FK_SavingsAccount FOREIGN KEY (Account_number) REFERENCES Account(Account_number) ; CREATE TABLE Checking_account( Account_number CHAR(10), Overdraft_limit MONEY, PRIMARY KEY (Account_number)) ALTER TABLE Checking_account ADD CONSTRAINT FK_CheckingAccount FOREIGN KEY (Account_number) REFERENCES Account(Account_number) ;任何帮助表示赞赏。
【问题讨论】:
-
错误很简单。主键不能有空值。如果您向 Payments 中插入一条记录,它必须具有 cust_id、credit_card_number 和 payment_number - 这些字段是表的主键。
-
我认为为您的表设置一个 int 身份 ID 会好得多。拥有像您这样的复合 id 会带来痛苦而收效甚微。拥有无意义的 ID 是常规的最佳做法。
标签: sql sql-server sql-insert