我在ASP.NET中遇到了一个C#MVC项目的问题。 我遇到的问题是类别系统:如果一个类别已添加到公司,那么您应该无法添加任何类别(父级(层次结构中的更高级别))而不是已添加的类别(因为它已经是包含在搜索中。)
现在我已经在C#代码中添加了这个:
if (companyToUpdate.Category.Any(x => x.Parent.Any(z => z.ID == currentCategoryID))) {
//already exists
}
现在问题是我想将此检查作为SQL Server数据库中的存储过程添加。
我的结构如下:
公司(所有公司)
ID Title
1 StackOverflow
类别(所有类别)
ID Title
1 Website
2 Helpful site
3 Very helpful site
CategoryDetails(用于了解每个类别的父/子, 每个类别都与其所有父母有关系) (网站 - >有用的网站 - >非常有用的网站)
Parent_ID Child_ID
1 2
1 3
2 3
CompanyCategoryDetails(此公司已添加哪些类别?)
Company_ID Category_ID
1 3
现在问题: 当您尝试在CompanyCategoryDetails中添加新行(1,2)时,应该拒绝它,因为您已经向其添加了Category_ID 3,这意味着已经包含了CategoryDetails表中指定的Category_ID 2。
我开始做一些检查我INNERJOIN表的地方,但是在我意识到它无法以我的思维方式完成之前没有走远。
答案 0 :(得分:1)
我认为您要求的支票是:
IF EXISTS(
SELECT *
FROM CompanyCategoryDetails CCD
JOIN CategoryDetails CD
ON CCD.Category_ID = CD.Child_ID
WHERE CCD.Company_ID = @Company_ID
AND (CD.Parent_ID = @Category_ID OR CD.Child_ID = @Category_ID))
BEGIN
--already exists
END
这将检查是否尝试添加到compnay(a)父类别或(b)现有类别