Sql where条件中返回的空名称
这是我的动态查询:Sql where条件中返回的空名称,sql,sql-server,sql-server-2008,tsql,dynamic-sql,Sql,Sql Server,Sql Server 2008,Tsql,Dynamic Sql,这是我的动态查询: 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
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
正如你们所看到的,我只是在寻找米勒,但我得到的名字也是空的。我错过了什么?任何帮助都将不胜感激。我发现您的SQL表达式中存在问题,这可能是内部select中问题的根源:
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,'''') + ''%'' )
我相信谓词IsNullNAME,比如COALESCE@0,+%您打算引用PageCHAR名称,但这不会发生
SELECT语句是最后要执行的部分之一,其中将首先执行,并且不知道PageCHAR是否被别名为NAME
因此,如果您打算使用PageCHAR,请将谓词更改为IsNullPageCHAR,如COALESCE@0,+%
我不知道列名是从哪里来的。在您的表中的某个地方可能有一个名称列,或者可能发生了一些非常疯狂的事情,因为名称确实存在于CTE之外,但我认为不是这样
同时,将函数应用于谓词的左侧肯定会使其不使用索引,因此请确保确实要这样做
关于select语句中的执行顺序,这里有一个有用的链接:U应该尝试用左外连接替换内部连接这不是答案。问题是为什么返回空名称的记录?您应该试着理解这个问题。我只希望它是内部连接,但返回包含Miller的名称。你能理解这个问题吗?我认为test2cwi是两个词->表test2和别名cwiYes,这是正确的。改变了。这是个打字错误,太棒了!正是我需要的。