首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过程外键sql

过程外键sql
EN

Stack Overflow用户
提问于 2016-02-03 16:54:47
回答 1查看 33关注 0票数 0

我不明白为什么这个过程的执行不起作用:

代码语言:javascript
复制
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中放入相应的values.For示例:

代码语言:javascript
复制
exec Pro1 1,1,1,12,2

它在表FacturaProdus中更新悬臂梁的负值以及arguments.Good.But给出的所有值:

代码语言:javascript
复制
exec Pro1 1,2,1,12,2 

它给了我一个错误:

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

为什么?为什么它不能仅仅放在从执行arg值的表中呢?有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-03 17:02:42

错误文本非常清楚:FacturaProdus表上有外键约束,它强制FacturaProdus.id_produs列引用来自Produse.id_produs列的值。

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

还请注意,注释掉的部分语句--where id_produs=@produs_id非常危险,因为您将使用为存储过程提供的值来更新整个FacturaProdus表。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35183062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档