2012-05-07 69 views
1

我们
我有一个类别表与CategoryID(主键),ParentID(int非空)和类别(nvarchar非空)。
我正尝试在此表中插入和检索具有ID ParentID的ID CategoryID和SubCategories的类别。
我一直在尝试整个周末没有运气,并希望你能帮助我。 I'm使用MSSQL 2008年
表结构应该是这样的:与类别和子类别的嵌套类别表

-Category1   
     SubCategory1 
     SubCategory2 
    ... 

-Category2 
      SubCategory2 
      SubCategory2 
    ... 

任何帮助将是非常赞赏

+1

你试过了什么代码? –

+0

从你的意见看来,在我看来,问题更多的是在UI控制端(例如GridView),如何更新GridView行插入数据,而不是在数据库端。如果是这样的话,我想你应该澄清一下,在你的问题中,如果它是一个技术特定的问题(例如WPF,ASP .NET,Windows Forms等)。顺便说一下,你有没有看到[RowCommand Event](http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx)的例子? –

+0

谢谢阿道夫。我研究过关于rowcommand的事件,并认为它可以提供帮助。我会试试看。 – Totem

回答

0
+0

谢谢,但文章并没有给我我需要的东西。该场景是一个简单的数据库插入(工作正常),然后显示类别的结果(工作正常)。现在如何选择一个Category(CategoryID)并在下面插入一个SubCategory(带有ID ParentID)。我使用Gridview来显示结果。 – Totem

+0

感谢Martin,我想我找到了我在这里寻找的东西:http://sqllessons.com/categories.html – Totem

0

您可以使用递归公用表表达式:

WITH cteTable(madeUpColA, madeUpColB, Etc) as 
(
    -- this select statement with the union all is what does the recursive query 
    SELECT aCol as madeUpColA, bCol as madeUpColB, Etc 
    from dbo.someTable 
    UNION ALL 
    SELECT aCol as madeUpColA, bCol as madeUpColB, Etc 
    FROM dbo.someTable st 
    INNER JOIN cteTable as c -- inner join on relationship 
    ON st.aCol = c.madeUpColA 
) 
-- this select statement is what retrieves the data from the above query 
SELECT madeUpColA, madeUpColB, Etc 
FROM cteTable 
-- add your other criteria here 

可以使用MSDN documentationWITH声明专门查询

+0

感谢您的回复。但我不认为它应该是那么复杂。我希望我知道一种方法来从gridview或datalist中选择插入的类别,并根据该类别的ID在Categories表格中插入一个子类别。我确信神奇应该发生在gridview的rowcommand,但我不知道如何去捕捉它:( – Totem

+0

谢谢查尔斯,我想我找到了我在这里找的:http://sqllessons.com /categories.html – Totem

+0

我发布的with语句可以防止您不必担心子类别的深度。例如,您发布的页面使用3个连接语句来获取4个子类别的深度。如果深度为1或很多,它仍然会返回所有结果 –

0

你只是在寻找一个简单的自我加入?如果是这样,这应该工作:

select parent.category, subcat.category as subcategory 
from Category subcat join 
    Category parent 
    on subscat.parentid = parent.categoryid 

或者你是否需要遍历整个家长链?如果是这样,那么递归CTE是更好的方法。

+0

对不起用于反馈晚。我不明白你的问题,但是它应该是一个简单的联合。它只关于表tblCategory:CategoryID [int]主键,ParentID [int] NOT NULL,Category [nvarchar](255)NOT NULL。 – Totem

+0

谢谢戈登,我想我找到了我在这里寻找的东西:http://sqllessons.com/categories.html – Totem