如何在SQL Server中的SELECT TOP 中使用变量

如果在SELECT TOP使用变量 如果TOP后取得行数是动态的,这时需要用变量实现动态数值,但如果直接写成: DECLARE @LineCount INT =10 SELECT TOP @LineCount * FROM sys.tables AS t 会返回错误: Msg 102, Level 15, State 1, Line 2 Incorrect syntax near '@LineCount'. 阅读详情

        数据库环境: 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 帮助中,不论语法,还是示例,都明明白白清清楚楚,而我们很多人,包括我,都难得能沉下心去研读这些基本的技术文档。看来,如有空闲,应该多看看书,充充电啊!

 

英飞凌TC3xx实战:PWM中点触发ADC采集+DMA自动搬运完整配置流程(基于ILLD库) 本文详细介绍了在英飞凌TC3xx系列微控制器上使用ILLD库实现PWM中点触发ADC采集并通过DMA自动搬运数据的完整配置流程。该方案适用于电机控制、电源管理等需要高精度定时采集的场景,通过GTM生成PWM信号、ADC采集和DMA传输实现全硬件自动化流程,显著提升系统效率。 阅读详情

相关推荐

【ZZULIOJ】郑州轻工业大学oj题解整合

写在前面 关于ZZULIOJ题解 学习编程,想要巩固无非就是刷题或者做项目,然后因为我大一开始是刷郑轻的题目,就想着自己整合一下自己写的题目。既是复习也是笔记吧。 题解(内有题目描述) 1000 整数a+b 1001 植树问题 1002 简单多项式求值 1003 两个整数的四则运算 1004 三位数的数位分离 1005 整数幂 1006 求等差数列的和 1007 鸡兔同笼 1008 美元和人民币 1009 求平均分 1010 求圆的周长和面积 1011 圆柱体表面积 1012 求绝对值 1013 求两点间

蒟蒻乱写的博客 29万+

SQL Server Select Top 语句

关于 SQL Server Select Top 语句,我的了解就是可以查询到你需要查询的那个表的前多少条数据,意思就是说可以限制选择查询的数据。 在使用select top语句中,他也可以包括其他字句,如一些:where,join,having,group by.... 下面我来简单地限制查询一下: 如上图,我首先查询了一整个表,然后通过select top语句只查询前五个。 还有一个就是百分比查询,通过top (1-100)percent 选择查询条数 如下图: ...

LIANG_XJT的博客 1903

SQLServertop关键字的用法

实例 1.select top 10 * from 成绩信息 作用:查询前十行数据 2.select top 10 percent * from 成绩信息 作用:查询前10%行的数据 3.declare @i int set @i=20 select top (@i) percent * from 成绩信息 声明了一个变量i为整型,然后对变量i复制为20,然后就可以限制20%行数的数据了。 4.declare @i int set @i=20 ...

zxm8513CSDN博客 7629

SqlServer 语句 select top后面接变量时报错

select top后面接变量 报错

READLEAF的博客 582

如何在 SQL Server 中的 SELECT TOP使用 变量

数据库环境: Sql Server 2005         查询语句类似:        SELECT TOP XX * FROM tbl ...        以前使用时,这种查询一般都是在程序中拼好Sql语句再执行,这次打算在存储过程中,用参数传入查询行数使用类似:         SELECT TOP @queryCount * FROM tbl      

3321

如何在 SQL Server 中的 SELECT TOP使用 变量

数据库环境: Sql Server 2005         查询语句类似:        SELECT TOP XX * FROM tbl ...        以前使用时,这种查询一般都是在程序中拼好Sql语句再执行,这次打算在存储过程中,用参数传入查询行数使用类似:         SELECT TOP @queryCount * FROM tbl          可编译时报错

月亮哥的专栏 1206

SQL SERVER SELECT TOP 变量

在写存储过程时,经常遇到select top x ,但top 后的 x需要是常量,之前一直这么认为的,如果返回的结果是变量时,只好写动态语句,实际只需要将x前后加上括号即可解决问题   改成这么样写就没有问题了: select top (x)

梁中林 的专栏 1059

转,sqlselect top 变量

/** 说明:在sql server 2005中,由于支持select top 变量,因此,不需要用动态sql来实现* 而在sql server 2000中,不支持select top 变量,因此,必须用动态sql*/ declare @pageSize int--页数大小declare @pageIndex int--页码set @pageSize = 10set @pageIn...

weixin_30693183的博客 122

Sql Server2005 Transact-SQL 新兵器学习总结之-TOP 运算符

TOP 运算符介绍:TOP 运算符在Sql Server2005得到了增强,可以使用任何数值表达式(如变量名),而不是仅使用整数来指定该运算符返回的行数TOP 现在还可以在 INSERT、UPDATE 和 DELETE 语句中指定。 TOP 运算符的几个使用总结:1.TOP 表达式可用在 SELECT、INSERT、UPDATE 和 DELETE 语句中。2.Top表达式可以是...

dianzudi1839的博客 124

select top 变量

declare @PageSize int set @PageSize = 10 ---select top @PageSize * from Products----尽然发现 select top 变量 的方式是用不上了.于是上网一查果然是这样.有没有什么方法可以代替了.----发现还是有的.就是用EXECexec (select top + @PageSize +

exy337的专栏 2439

MS SQLselect top 后跟变量

SQL2005 中selecdt top后是可以直接跟变量的比如:(但要注意的是变量要用括号括起来) select top (@i )* from table 在SQL2000中,Select Top后是不能直接跟变量的: 要解决2000中top后跟变量的方法有两种: 第一种: declare @i int,@sql varchar(100) ...

weixin_30496431的博客 118

对表变量的认识和对insert select的扩充(取前三行的值)

如下的一个表:COLUMN1  COLUMN2     COLUMN3 -------- ----------- -------------- 1        A           10001        B           20001        C           30001        D           30001        E           40001  

578

关于解决SQL语句select top 后面不能接变量的问题(sql 2000)

关于解决SQL语句select top 后面不能接变量的问题(sql 2000),采用动态的Sql语句来处理 ALTER proc [dbo].[sp_GetSubjectByTypeAndNum] @type VarChar(50), @num Int as declare @a int set @a=@num declare @sql nvarchar(40...

weixin_30405421的博客 264

关于不同sql语句执行效率的问题

set @a=Na 和 select @a=Na  哪种赋值效率高呢在单个赋值的情况下,它们的速度是一样的但是多个赋值的情况下,用select 赋值速度更快 ---------------------------------------------------------------------------------------取前几条数据时set ROWCOUNT 2

lee576的专栏 1662

中科大的500-CSL数据集500类中文手语单词数据集已转化为mat格式

中科大的500-CSL数据集500类中文手语单词数据集已转化为mat格式

上一篇: Asp.net 中,FileUpload 上传文件为何总失败,而 HasFile 为何为 False
下一篇: RSS 2.0 DTD,网上找来两个
IsMe
博客等级 码龄24年 4粉丝 36原创
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值