所以我得到了一大堆错误
(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
答案 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指出的那样,更正存储过程名称中的拼写错误。