2011-07-09 55 views
1

使用MS SQL存储过程我收到以下错误“无效的列名NavigationID”。SP帮助(无效的列名称)

任何人都可以让我知道我做错了吗?

DECLARE @NavigationID INT 
SET @NavigationID = 5 

CREATE TABLE #tmp (NavigationID int , ParentID int); 
INSERT INTO #tmp SELECT NavigationID, ParentID FROM Nav; 

    WITH Parent AS 
    (
     SELECT NavigationID, ParentID FROM #tmp WHERE NavigationID = @NavigationID 
     UNION ALL 
     SELECT t.NavigationID, t.ParentID FROM Parent 
     INNER JOIN #tmp t ON t.NavigationID = Parent.ParentID 
    ) 

    SELECT NavigationID FROM ParentID 
    WHERE NavigationID <> @NavigationID; 

回答

1

随着你发布的代码,你会得到。

Msg 208, Level 16, State 1, Line 10 
Invalid object name 'ParentID'. 

更改FROM ParentID至。

您还需要表Nav中的栏NavigationID

试试这个:

declare @Nav table(NavigationID int, ParentID int) 

insert into @Nav 
select 1, null union all 
select 2, 1 union all 
select 3, 1 union all 
select 4, 3 union all 
select 5, 3 union all 
select 6, null union all 
select 7, 6 

declare @NavigationID int; 
set @NavigationID = 5; 


with Parent as 
(
    select NavigationID, 
     ParentID 
    from @Nav 
    where NavigationID = @NavigationID 
    union all 
    select t.NavigationID, t.ParentID 
    from Parent 
    inner join @Nav t 
     on t.NavigationID = Parent.ParentID 
) 
select NavigationID 
from Parent 
where NavigationID <> @NavigationID; 

结果:

NavigationID 
------------ 
3 
1 

更换@Nav与任何表所使用。 @Nav只是在这里,以便这个代码可以复制和测试。

+0

嗨,谢谢。一旦改变它仍然说“无效的列名NavigationID”。 – techco1

+0

消息207,级别16,状态1,行9 列名'NavigationID'无效。 消息207,级别16,状态1,行9 列名称'NavigationID'无效。 消息207,级别16,状态1,行12 列名'NavigationID'无效。 消息207,级别16,状态1,行11 列名称'NavigationID'无效。 – techco1

+0

那个表“Nav”是什么样的? –