Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无法绑定多部分标识符“多级”CTE中出现错误_Sql Server_Sql Server 2008_Common Table Expression - Fatal编程技术网

Sql server 无法绑定多部分标识符“多级”CTE中出现错误

Sql server 无法绑定多部分标识符“多级”CTE中出现错误,sql-server,sql-server-2008,common-table-expression,Sql Server,Sql Server 2008,Common Table Expression,我试图根据表中的行号获取一组特定的行。为此,我尝试将以下sql查询与公共表表达式cte一起使用。我已在查询中标记出问题所在的部分 我遇到的问题是不同的,因为CTE中的第二个查询有一个基于参数的where子句,所以我无法按如下所示加入表: 我确信我缺少了CTE语法的一些基础知识,因为设置本身对我来说是有意义的,如果我摆脱了CTE,我可以让它工作。有人能告诉我我错过了什么吗 ;with cte as ( SELECT ROW_NUMBER() OVER (ORDER BY Creat

我试图根据表中的行号获取一组特定的行。为此,我尝试将以下sql查询与公共表表达式cte一起使用。我已在查询中标记出问题所在的部分

我遇到的问题是不同的,因为CTE中的第二个查询有一个基于参数的where子句,所以我无法按如下所示加入表:

我确信我缺少了CTE语法的一些基础知识,因为设置本身对我来说是有意义的,如果我摆脱了CTE,我可以让它工作。有人能告诉我我错过了什么吗

;with cte as (
        SELECT ROW_NUMBER() OVER (ORDER BY Created) RNUM, * 
        FROM Notes 
        WHERE BookId = @BookId AND Username = @Username
    ), 
    offsetrow as (
        SELECT RNUM
        FROM cte
        WHERE cte.NoteId = @StartOffset
    )

    SELECT * 
    FROM cte
    WHERE cte.RNUM > offsetrow.RNUM --The multi-part identifier 'offset.RNUM' could not be bound.

基本上,这里的问题是您仅从一个resultset cte中进行选择。您的表达式代码当前生成两个:cte和offsetrow


你应该像对待两个经典的表/视图那样将它们连接在一起。

你错过了在上一个select语句中加入offsetrow from子句,我的朋友。请这样做:

 SELECT * 
 FROM cte,offsetrow
 WHERE cte.RNUM > offsetrow.RNUM

我也遇到过同样的问题,发现如果我想从CTE1中选择某些列,然后加入CTE2,Hiren的解决方案就行不通了。相反,我不得不做下面的事情

选择。。。。 来自CTE1 左连接CTE2 在CTE1.Column=CTE2.Column上


这对我很有用

谢谢你的回复。cte和offsetrow在最终select语句中有两个不同的用途。我可以不分开使用这两张桌子吗?我现在明白你的意思了。啊!再次感谢!谢谢啊。真不敢相信这一切都发生了,太好了。它发生在它里面。