Sql server 如何在具有外键的表中插入数据

Sql server 如何在具有外键的表中插入数据,sql-server,Sql Server,我有一张叫做“顾客和信用卡”的桌子。我正在尝试将数据插入到customers表中。我弄不清楚如何将数据插入客户,它抛出了一个错误 提供的值的列名或数目与表定义不匹配 信用卡表格 CREATE TABLE CreditCards ( CreditCardID INT IDENTITY(1,1) PRIMARY KEY, FirstName NVARCHAR(40) NOT NULL, MiddleName NVARCHAR(40), LastName NVARCHA

我有一张叫做“顾客和信用卡”的桌子。我正在尝试将数据插入到customers表中。我弄不清楚如何将数据插入客户,它抛出了一个错误

提供的值的列名或数目与表定义不匹配

信用卡
表格

CREATE TABLE CreditCards
(
    CreditCardID INT IDENTITY(1,1) PRIMARY KEY,
    FirstName NVARCHAR(40) NOT NULL,
    MiddleName NVARCHAR(40),
    LastName NVARCHAR(40) NOT NULL,
    Brand NVARCHAR(40) NOT NULL,
    Bank NVARCHAR(40) NOT NULL,
    [Number] INT UNIQUE NOT NULL,
    DateofExpiration DATETIME NOT NULL,
    VerificationCode INT NOT NULL
);
客户
表格:

CREATE TABLE Customers
(
    CustomerID INT IDENTITY(1,1) PRIMARY KEY,
    FirstName NVARCHAR(40) NOT NULL,
    MiddleName NVARCHAR(40),
    LastName NVARCHAR(40) NOT NULL,
    StreetAddress NVARCHAR(100) NOT NULL,
    [State] NVARCHAR(40) NOT NULL,
    Country NVARCHAR(40) NOT NULL,
    CellPhoneNumber NVARCHAR(40),
    EmailAddress NVARCHAR(120),
    CreditCardID INT FOREIGN KEY REFERENCES CreditCards(CreditCardID)
);
我正试图使用此语句将数据插入到customer表中

INSERT INTO Customers 
VALUES ('John', 'ba', 'Dock', '515 East Halliday Street', 'Idaho', 'United States of America', '2082203814', 'docjon@ss.org');

此错误与外键无关


Customers
表有10列,但在
INSERT
语句中只有8个值。您缺少
CustomerID
CreditCardID

您应该在
INSERT
语句中明确列出要填写的列:

INSERT INTO Customers (FirstName, MiddleName, LastNamr, StreetAddress, [State] , Country, CellPhoneNumber, EmailAddress)
VALUES('John','ba','Dock','515 East Halliday Street','Idaho','United State of America','2082203814','docjon@ss.org');
省略的列将获得其默认值
CustomerID
将使用
IDENTITY
功能自动填写,
CreditCardID
NULL
。如果要使用刚刚插入
信用卡
表的行的
信用卡ID
,可以使用
@@IDENTITY
变量:

NSERT INTO Customers (FirstName, MiddleName, LastNamr, StreetAddress, [State] , Country, CellPhoneNumber, EmailAddress, CreditCardID)
VALUES('John','ba','Dock','515 East Halliday Street','Idaho','United State of America','2082203814','docjon@ss.org', @@IDENTITY);
即使在提供所有列的情况下,这也是一个好主意,因为您不会使语句依赖于表创建中列的顺序。它还使代码更容易理解,因为读者不必再参考表规范来了解每个值是什么


顺便说一句,您的一个列名中有一个输入错误:
LastNamr
应该是
LastName

这看起来像MS Sql Server,而不是MySQL。您在
INSERT
语句中缺少
CustomerID
值。如果希望使用
IDENTITY
功能自动填写,请使用
NULL
。它们似乎也缺少CreditCardID的值。信用卡的到期日期是一个日期,不是日期时间。谢谢你的帮助。我需要做什么来插入信用卡ID的数据使用
@@IDENTITY
来获取最近一次插入到该表中的ID。顺便说一句,如果你在美国,将CVV代码保存在数据库中违反PCI法规。