Справка SP (неверное имя столбца) - PullRequest
1 голос
/ 09 июля 2011

При использовании хранимой процедуры MS SQL я получаю следующую ошибку «Неверное имя столбца NavigationID».

Может кто-нибудь сообщить мне, что я делаю неправильно?

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 Ответ

1 голос
/ 09 июля 2011

Полученный вами код вы получите.

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

Измените FROM ParentID на FROM Parent.

Вам также нужен столбец NavigationID в таблице Nav.

Попробуйте это:

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 здесь только для того, чтобы этот код можно было скопировать и протестировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...