Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
过程外键sql_Sql_Sql Server_Tsql_Foreign Keys - Fatal编程技术网

过程外键sql

过程外键sql,sql,sql-server,tsql,foreign-keys,Sql,Sql Server,Tsql,Foreign Keys,我无法理解为什么执行此过程不起作用: CREATE PROCEDURE Pro1 ( @factura_id int, @produs_id int, @pret float, @cantitate int,@nr_ordine int ) as begin if((select COUNT (id_produs) from Produse where id_produs=@produs_id)=1) update FacturaProdus set

我无法理解为什么执行此过程不起作用:

CREATE PROCEDURE Pro1
( 
    @factura_id int, @produs_id int, @pret float, @cantitate int,@nr_ordine int
)
as
begin
    if((select COUNT (id_produs) from Produse where id_produs=@produs_id)=1)
        update FacturaProdus set 
          id_factura=@factura_id,  
          id_produs=@produs_id,
          pret =@pret,
          cantitate = CONCAT ('-',convert(int,@cantitate)), 
          nr_ordine=@nr_ordine
    --where id_produs=@produs_id
else

    insert into FacturaProdus(id_factura,id_produs,pret,cantitate,nr_ordine) 
    values(@factura_id,@produs_id,@pret, @cantitate,@nr_ordine)

end
go
如果id_produs与arg@produs_id不同,则在表FacturaProdus中输入相应的值。例如:

exec Pro1 1,1,1,12,2
它会在FacturaProdus表中更新cantitate的负值和arguments给出的所有值。很好。但对于:

exec Pro1 1,2,1,12,2 
它给出了我的错误:

INSERT语句与外键约束“FK_fac2”冲突。冲突发生在数据库“VanzariP1”、表“dbo.Produse”、列“id_produs”中

为什么??为什么不能将exec arg中的值放入表中?
有什么建议吗?

好吧,错误文本是不言自明的:您在
FacturaProdus
表上有外键约束,它强制
FacturaProdus.id\u produs
列引用
Produse.id\u produs
列中的值

因此,如果您试图使用
@produs\u id
调用存储过程,而
Produse
表中没有该id,则必须在存储过程的
insert into FacturaProdus
语句之前,将具有该id的记录和一些数据插入
Produse

还要注意语句
中注释掉的这一部分——其中id_produs=@produs_id
非常危险,因为您将使用提供给存储过程的值更新整个
FacturaProdus


我真的怀疑这样的更新是您的意图。

我们不知道您的表结构是什么样的,我们怎么知道?这表示您正在尝试插入引用表中不存在的值。此外,程序中的更新也有问题。它将在每次执行时更新整个表。看起来你有一个where子句,但它被注释掉了。它只在产品id存在时更新我。嗯??您的更新没有where子句,这意味着每一行都将被更新。