我发现这个 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
最佳答案
您不能在 SQL Server 的 WHERE
子句中直接引用计算/计算列别名。但是,一个简单的解决方法是包装该语句并将 WHERE
子句放在外部,引用计算列:
SELECT * FROM (
SELECT PostID, Title, dbo.fn_Root(PostID) AS Expr1
FROM Post)
WHERE Expr1 = 5
关于c# - 'Where' 表达式中的列名称无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934818/