c# - 'Where' 表达式中的列名称无效

标签 c# sql-server sql-server-2008

我发现这个 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/

相关文章:

c# - EF 生成的查询执行时间过长

c# - Microsoft.SqlServer.Types : Error loading msvcr120. dll(错误代码:5)

sql-server - 存储过程中返回值 0 总是成功吗?

sql-server-2008 - 如何解决错误 : 1418 in sql server while mirroring

c# - 使用 C# 中的 PUT 请求将内容写入 Azure 存储上的文件

c# - 将 LinqDataSource 绑定(bind)到两个单独的表

C# 一次绘制对象而不是使用循环

sql - 根据连续日期计算排名(如果日期之间有间隔天数,则返回 1)

sql - 为什么bcp在列包含空字符串时输出null,在列为null时输出空字符串?

t-sql - 我是否必须在 T-SQL 中的 catch block 中回滚事务之前对事务进行计数?