Неверное имя столбца в выражении «Где» - PullRequest
2 голосов
/ 20 января 2012

Я нашел эту функцию SQL, которая выполняет итерации по таблице, и находит ParentID , код работает, за исключением случаев, когда я помещаю в него предложение where, которое не работает во вновь созданном столбце.Если я не использую предложение where, оно выдает Expr1 в качестве корня дерева, чего я и хочу, но я не могу наложить на него условие.

Может ли кто-нибудь мне помочьрешить эту проблему?

ALTER FUNCTION dbo.fn_Root
(
    @PostID int
)
RETURNS int
AS 
BEGIN
DECLARE @R int

SELECT @R = CASE WHEN ParentPostID = 0 THEN PostID
                ELSE dbo.fn_Root(ParentPostID)
            END
        FROM Post
        WHERE PostID = @PostID

RETURN @R
END


SELECT PostID, Title, dbo.fn_Root(PostID) AS Expr1
FROM Post WHERE Expr1 = 5

Ответы [ 2 ]

3 голосов
/ 20 января 2012

Нельзя ссылаться на вычисленный / вычисленный псевдоним столбца непосредственно в предложении WHERE в SQL Server.Однако один из тривиальных обходных путей заключается в том, чтобы обернуть оператор и поместить предложение WHERE снаружи, ссылаясь на вычисляемый столбец:

SELECT * FROM (
    SELECT PostID, Title, dbo.fn_Root(PostID) AS Expr1
    FROM Post)
WHERE Expr1 = 5
2 голосов
/ 20 января 2012

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

SELECT PostID, Title, dbo.fn_Root(PostID) AS Expr1
FROM Post 
WHERE dbo.fn_Root(PostID) = 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...