首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-10-29 
消息 102,级别 15,状态 1,第 5 行 ')' 附近有语法错误。create proc usp_GetAllLogsSelect_Pages

消息 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+''')

就可以啦 你试试吧

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


主要的问题在于@uname变量时varchar类型的,在动态拼接语句时,如果是要拼接字符串的值,你要生成如下的语句:
……and Uname like '字符串值'

但你上面的语句拼接的时候少了括住@uname值的引号:
' and Uname like '+ @Uname 

那么为了加上引号,拼接的时候必须要写成这样,要把引号写两次:
' Uname like '''+ @Uname + ''''


[解决办法]
create proc usp_GetAllLogsSelect_Pages后面用括号把参数括起来就可以了啊
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) 

热点排行