2012-06-10 65 views
1

我的查询下面给出 '与FK约束冲突':SQL Server 2008中 - 无法插入由于

insert into Orders 
values 
('20012', /*order num, pk*/ 
'6-10-2012', /*date, i wrote it in a different format, is that okay ?*/ 
'1000000012'/*customer id, fk*/ 
) 

错误:

The INSERT statement conflicted with the FOREIGN KEY constraint 
"FK_Orders_Customers". 
The conflict occurred in database "MyDB", table "dbo.Customers", column 'cust_id'. 
The statement has been terminated. 

为什么我得到这个错误?我怎样才能将一些虚拟值插入此表中?

+1

你确定1000000012存在,它是TEXT? – xQbert

+1

@xQbert - 我认为你的意思是一个字符串而不是'TEXT'(这是一个废弃的大对象数据类型的名称)。虽然引号不需要/不应该在那里,如果该列实际上是数字SQL Server会隐式转换'1000000012'无论如何。 –

回答

2

从错误信息,这听起来像你没有一个客户记录ID为“1000000012”在你的客户表

+0

是的。我现在使用了一个存在的客户ID。插入成功。因此,在您可以将某些内容插入订单表之前,数据库会检查客户是否存在。你能告诉我这是如何完成的吗?我是新手,并试图在SQL中进行速成课程。 – YourDataInsecure

+0

在订单表中的客户ID字段上定义的客户有一个外键。这意味着数据库坚持认为您在该字段中输入的任何标识在客户表中都有相应的标识。在线查看书籍中的外键以获取更多信息。 – Ray

+0

谢谢,明白了! – YourDataInsecure

3

你所得到的错误,因为在与“客户”表中没有记录“cust_id”列中的客户ID为1000000012。首先将该记录插入“Customers”表中,您应该没问题。

+0

明白了。因此,在您可以将某些内容插入订单表之前,数据库会检查客户是否存在。你能告诉我这是如何完成的吗?我是新手,并试图在SQL中进行速成课程。 – YourDataInsecure

+0

基本上,外键是一个表中引用另一个表中的列的列。因此,您插入标记为外键的列中的数据必须存在于正在引用的列中。您稍后也可能会在删除时碰到它。假设您想稍后删除该客户,那么当您正试​​图插入的订单引用该客户时,您将无法做到这一点。无论如何,重要的一点是客户必须存在于数据库中,然后才能为该特定客户插入订单。 – collusionbdbh

+0

SQL服务器负责检查所有这些事情,创建一个外键,这个外键在表创建时完成。这将包含在您使用的Orders表的create table语句中:FOREIGN KEY(Cust_id)REFERENCES Customers(Cust_id)。如果您想了解更多信息,请点击此处:http://www.w3schools.com/sql/sql_foreignkey.asp – collusionbdbh