这与我的AddPartner程序有什么不同?

时间:2016-01-27 16:09:31

标签: sql sql-server tsql stored-procedures database-design

所以我得到了一大堆错误

  

(1行(s)受影响)Msg 2812,Level 16,State 62,Line 48未能   找到存储过程'AddPartner'。 Msg 2812,Level 16,State 62,Line   49无法找到存储过程'AddPartner'。消息2812,16级,   状态62,第50行无法找到存储过程'AddPartner'。

     

(1行受影响)

     

(受影响的1行)Msg 547,Level 16,State 0,Procedure AddAnswer,   第114行INSERT语句与FOREIGN KEY冲突   约束“FK__Answers__partner__145C0A3F”。冲突发生在   数据库“SurveyDb”,表“dbo.Partners”,列'id'。该声明   已被终止。 Msg 547,Level 16,State 0,Procedure AddAnswer,   第114行INSERT语句与FOREIGN KEY冲突   约束“FK__Answers__partner__145C0A3F”。冲突发生在   数据库“SurveyDb”,表“dbo.Partners”,列'id'。该声明   已被终止。 Msg 547,Level 16,State 0,Procedure AddAnswer,   第114行INSERT语句与FOREIGN KEY冲突   约束“FK__Answers__partner__145C0A3F”。冲突发生在   数据库“SurveyDb”,表“dbo.Partners”,列'id'。该声明   已被终止。 Msg 547,Level 16,State 0,Procedure AddAnswer,   第114行INSERT语句与FOREIGN KEY冲突   约束“FK__Answers__partner__145C0A3F”。冲突发生在   数据库“SurveyDb”,表“dbo.Partners”,列'id'。该声明   已被终止。

并且我认为它们都来自前{3}的前三个错误,但我无法弄清楚问题的确切来源,因为我已多次查看我的语法。在相关的说明中,是否存在某种在线工具可以帮助人们获得调试SQL错误的提示?

AddPartner

1 个答案:

答案 0 :(得分:0)

问题出在AddAnswer程序中。您正在添加伙伴表中不存在的伙伴ID,因此参照完整性失败。查看您的合作伙伴表(select * from partners)并查看ID是什么。

除此之外,我会说1)你需要在插入行之前添加一些检查。如果你试图两次添加'Berkshire Hathaway',那就错了。首先检查,你没有这个问题:

if not exists ( select * from partners where [name] = @name )
    begin
        INSERT INTO Partners (name) VALUES (@name)
    end

另外:您应该考虑不使用名为name的列 - 请将其称为PartnerName或其他内容,当然,但是使用随机name列无助于提高可读性并可能导致语法检查问题这条路。

编辑:或者,正如Jamie指出的那样,更正存储过程名称中的拼写错误。