检查类别父级是否存在的存储过程

时间:2012-10-17 08:00:13

标签: sql-server stored-procedures

我在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

CategoryDe​​tails(用于了解每个类别的父/子,     每个类别都与其所有父母有关系)     (网站 - >有用的网站 - >非常有用的网站)

Parent_ID   Child_ID
1           2
1           3
2           3

CompanyCategoryDe​​tails(此公司已添加哪些类别?)

 Company_ID Category_ID
1           3

现在问题: 当您尝试在CompanyCategoryDe​​tails中添加新行(1,2)时,应该拒绝它,因为您已经向其添加了Category_ID 3,这意味着已经包含了CategoryDe​​tails表中指定的Category_ID 2。

我开始做一些检查我INNERJOIN表的地方,但是在我意识到它无法以我的思维方式完成之前没有走远。

1 个答案:

答案 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)现有类别