数据库环境: Sql Server 2005
查询语句类似:
SELECT TOP XX * FROM tbl ...
以前使用时,这种查询一般都是在程序中拼好Sql语句再执行,这次打算在存储过程中,用参数传入查询行数,使用类似:
SELECT TOP @queryCount * FROM tbl
可编译时报错:
消息 102,级别 15,状态 1,第 3 行
'@queryCount' 附近有语法错误。
郁闷死,在百度上搜搜,发现不少类似问题,而解决的方法,一般有两种:
1、在查询前,设置 SET ROWCOUNT @queryCount,查询接受后,重新设置成0
2、在存储过程拼Sql,然后 Exec
不甘心啊,仔细阅读SqlServer帮助文档,从 SELECT 语句,按照帮助连接,又查到 TOP 帮助,连接地址为:
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/da983c0a-06c5-4cf8-a6a4-7f9d66f34f2c.htm
语法
[ TOP (expression) [PERCENT] [ WITH TIES ] ] |
注意:expression 是在一对圆括号内的,而之后又有如下的例子
在 TOP 中使用变量
以下示例使用变量获得 AdventureWorks
数据库的 dbo.Employee
表中列出的前 10 个雇员。
复制代码 | |
---|---|
USE AdventureWorks ; GO DECLARE @p AS int SET @p='10' SELECT TOP(@p)* FROM HumanResources.Employee; GO |
到此,感觉问题终于可以解决了,再在 Sql查询分析器中测试,只要将变量放到圆括号内,则没有任何问题!
感叹:
1、规范、严谨,无论语法还是示例,文档中 TOP 后面的表达式,全都是在圆括号内的,我们的Sql语句往往不够规范,而不规范的语句,可能一般情况下没问题,但某些情况下
2、认真学习,我们程序员,往往这样,只要应用中能凑合着过去,对技术问题却不求甚解,就像这个问题,Sql Server 帮助中,不论语法,还是示例,都明明白白清清楚楚,而我们很多人,包括我,都难得能沉下心去研读这些基本的技术文档。看来,如有空闲,应该多看看书,充充电啊!