为什么这个sql语句不加括号会报错。

来源:百度知道 编辑:UC知道 时间:2024/05/18 01:58:00
--根据视图查询所有商品
ALTER procedure [dbo].[proc_SelectAllProduct]
@pageindex int, --第几页
@pagenum int --每页页数
as
SELECT TOP @pagenum Id, Name, [Count] FROM vw_Product
where id not in(select top @pagenum*@pageindex id from vw_Product order by id )
order by id

上面会报错,
必须加括号
如下才不报错:
--根据视图查询所有商品
ALTER procedure [dbo].[proc_SelectAllProduct]
@pageindex int, --第几页
@pagenum int --每页页数
as
SELECT TOP (@pagenum) Id, Name, [Count] FROM vw_Product
where id not in(select top (@pagenum*@pageindex) id from vw_Product order by id )
order by id

为什么啊。。。

因为 "TOP" 的标准用法就是: top(int) 所有要加()

sql在执行查询语句时,由于top后跟的是常数,如果不加特别标志会当作常量处理,而你的@pagenum在该代码中是一个参数变量,只有加括号以区别不然SQL会报错。

这个是top用法的规矩 top后面的常数必须用括号括起来 至于为什么 这个需要问问开发mssql的人。。。。