读书人

消息 102级别 15状态 1第 5 行

发布时间: 2013-10-29 12:07:57 作者: rapoo

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

读书人网 >SQL Server

热点推荐