【发布时间】:2017-09-13 06:03:58
【问题描述】:
我在调试与我拥有的 SQL Server 存储过程有关的代码时遇到了一个问题
“UPDATE 语句与 FOREIGN KEY 约束 \"FK_PATIENTS_DropdownCounty\" 冲突。冲突发生在数据库 \"****\",表 \"dbo.DropdownCounty\",列 'County'
我正在使用 DropdownCounty 表填充下拉菜单,但是当我尝试更新网页时,它给了我上面的问题。我已经在 SQL 本身中尝试了 CASCADE 选项。
我使用的SQL Server存储过程如下
ALTER PROC [dbo].[PatientDetailsUpdate]
@PatientNumber INT,
@HospitalNumber NVARCHAR(50),
@HC_Number NCHAR(20),
@ID_Number_LegacyID NCHAR(20),
@ConsentToDatabase BIT,
@ConsentGivenDate DATETIME,
@Sex CHAR(6),
@Forename NVARCHAR(50),
@Surname NVARCHAR(50),
@MaidenName NCHAR(10),
@DateOfBirth DATETIME,
@Age NCHAR(10),
@AddressLine1 NVARCHAR(50),
@AddressLine2 NVARCHAR(50),
@AddressLine3_TownCity NVARCHAR(50),
@AddressLine4_Region NVARCHAR(50),
@County NCHAR(17),
@Country NCHAR(10),
@PostCode NVARCHAR(50),
@HomeTelNumber NVARCHAR(50),
@MobileTelNumber NVARCHAR(50),
@WorkTelNumber NVARCHAR(50),
@Email NVARCHAR(50),
@Notes NVARCHAR(MAX)
AS
BEGIN
UPDATE PATIENTS
SET HospitalNumber = ISNULL (@HospitalNumber, HospitalNumber),
HC_Number = ISNULL (@HC_Number, HC_Number),
ID_Number_LegacyID = ISNULL (@ID_Number_LegacyID, ID_Number_LegacyID),
ConsentToDatabase = ISNULL (@ConsentToDatabase, ConsentToDatabase),
ConsentGivenDate = ISNULL (@ConsentGivenDate, ConsentGivenDate),
Sex = ISNULL (@Sex, Sex),
Forename = ISNULL (@Forename, Forename),
Surname = ISNULL(@Surname, Surname),
MaidenName = ISNULL (@MaidenName, MaidenName),
DateOfBirth = ISNULL (@DateOfBirth, DateOfBirth),
Age = ISNULL (@Age,Age),
AddressLine1= ISNULL(@AddressLine1, AddressLine1),
AddressLine2= ISNULL(@AddressLine2, AddressLine2),
AddressLine3_TownCity = ISNULL(@AddressLine3_TownCity, AddressLine3_TownCity),
AddressLine4_Region = ISNULL(@AddressLine4_Region, AddressLine4_Region),
County = ISNULL(@County, County),
Country = ISNULL(@Country, Country),
PostCode = ISNULL(@PostCode, PostCode),
HomeTelNumber = ISNULL(@HomeTelNumber, HomeTelNumber),
MobileTelNumber = ISNULL(@MobileTelNumber, MobileTelNumber),
WorkTelNumber = ISNULL(@WorkTelNumber, WorkTelNumber),
Email = ISNULL(@Email, Email),
Notes = ISNULL(@Notes, Notes)
WHERE
PatientNumber = @PatientNumber
END
我需要使用 LEFT JOIN 来链接表格吗?
提前致谢,
对不起,我只是数据库方面的新手 我已将 DropdownCounty 的值包含在其表中
我上传的第二张图片是为了帮助您了解每当调用 BtnUpdate 时我要调用的内容
【问题讨论】:
-
失败是因为
@Country的值在你的FK 表DropdownCounty中不存在。那么,@Country的值是多少,DropdownCounty表中的当前值是多少?可能是@Country为空(即空字符串且 NOT null)并且您没有在语句中检查这一点。 -
了解 UPDATE 语句失败时使用的确切值将非常有帮助。你能捕捉到吗?也许通过在运行 SQL Server Profiler 时运行它?
-
请检查您在存储过程中为
County传递的内容。无论您传递什么,听起来它都需要存在于您的DropdownCounty.CountySQL 表和列中,但它没有。 -
县同时出现在 PATIENTS 表和 DropdownCounty 表中。这两个值都是 NCHAR,因为 County 列是 PATIENTS 表中的外键。
-
问题是您的更新语句在
County中传递了一个在您的DropdownCounty表中不存在的值。看看@Igor 的第一条评论,你就会明白了。当他的意思是County时,他只是打错了Country
标签: c# sql asp.net sql-server stored-procedures