日期:2014-05-17  浏览次数:20525 次

消息 102,级别 15,状态 1,第 5 行 ')' 附近有语法错误。

create proc usp_GetAllLogsSelect_Pages
@Category int,
@Visible int,
@Uname varchar(50),
@PageSize int,
@PageIndex int
AS
declare @x int,@y int
set @x=(@PageIndex-1)*@PageSize+1
set @y=(@PageIndex)*@PageSize

exec ('select* from(
      select ROW_NUMBER() over(order by ReleaseTime desc) as Rownum,
      LId,LogName,Abstract,CommentNo,ReadNo,UName,Category,ReleaseTime
      from Logs
      where Category='+@Category+' and Visible='+@Visible+' and Uname like '+@Uname+')
      as log
      where Rownum between '+@x+' and ' +@y) 


死活都是这个错误消息 102,级别 15,状态 1,第 5 行
')' 附近有语法错误。
没办法了来提问
SQL

------解决方案--------------------
alter proc usp_GetAllLogsSelect_Pages 
AS
begin
declare @Category int,
        @Visible int,
@Uname varchar(50),
@PageSize int,
@PageIndex int,
@x int,
@y int
set @x=(@PageIndex-1)*@PageSize+1
set @y=(@PageIndex)*@PageSize

exec ('select* from(
      select ROW_NUMBER() over(order by ReleaseTime desc) as Rownum,
      LId,LogName,Abstract,CommentNo,ReadNo,UName,Category,ReleaseTime
      from Logs
      where Category='+@Category+' and Visible='+@Visible+' and Uname like '+@Uname+')
      as log
      where Rownum between '+@x+' and ' +@y) 
end

你要 把参数传递好
------解决方案--------------------
  where Category='+@Category+' and Visible='+@Visible+' and Uname like '+@Uname+')

改成

  where Category='+@Category+' and Visible='+@Visible+' and Uname like '''+@Uname+''')

就可以啦 你试试吧
------解决方案--------------------
最简单的方法是把你的exec改成print,然后调试,通常都是单引号和双引号的问题和类型转换的问题而已
------解决方案--------------------
引用:
Quote: 引用:

  where Category='+@Category+' and Visible='+@Visible+' and Uname like '+@Uname+')

改成

  where Category='+@Category+' and Visible='+@Visible+' and Uname like '''+@Uname+''')

就可以啦 你试试吧

哇塞,真的成功了,这是啥原理啊?!!!!