0

这是我的动态查询:

exec sp_executesql N'SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY NAME asc) peta_rn, peta_query.* 
    From (Select BOOK, PageINT, PageCHAR NAME, TYPE, PDF From test1 cdn
                            Inner Join test2 cwi
                                On cwi.ID = cdn.ID Where 1=1  And IsNull(NAME,'''') Like COALESCE(@0,'''') + ''%''  )
                                 as peta_query) peta_paged WHERE peta_rn>@1 AND peta_rn<=@2',N'@0 varchar(4000),@1 bigint,@2 bigint',@0='Miller',@1=0,@2=50

如您所见,我只是在搜索,Miller但我得到的名字也是空的。我在这里想念什么?任何帮助,将不胜感激。

4

1 回答 1

1

我在您的 SQL 表达式中看到一个问题,这可能是内部选择中问题的根源:

From (Select BOOK, PageINT, PageCHAR NAME, TYPE, PDF From test1 cdn
    Inner Join test2 cwi
    On cwi.ID = cdn.ID 
    Where 1=1  And IsNull(NAME,'''') Like COALESCE(@0,'''') + ''%''  )

我相信IsNull(NAME,'''') Like COALESCE(@0,'''') + ''%''您打算引用 的谓词PageCHAR NAME,但这并没有发生。

SELECT语句是最后执行的部分之一,WHERE将首先执行并且不知PageCHAR道别名为NAME.

因此,如果您打算使用PageCHAR,请将谓词更改为IsNull(PageCHAR,'''') Like COALESCE(@0,'''') + ''%''.

专栏NAME是从哪里来的,我不知道。您的表中可能有一个NAME列,或者可能正在发生一些超级疯狂的事情,因为NAME确实存在于 CTE 之外,但我认为不是这样。

同样将函数应用于谓词的左侧肯定会使其不使用索引,因此请确保您确实想要这样做。

这是一个关于选择语句中执行顺序的有用链接:http ://www.c-sharpcorner.com/Blogs/4536/order-of-execution-of-select-statement.aspx

于 2013-09-20T05:42:48.927 回答