TOP字句加SQL变量的相关问题

数据库 SQL Server
SQL Server2005开始,TOP子句后可以跟常量或者变量,跟常量时可省略括号,下文将对TOP字句加SQL变量的相关问题进行讨论,供您参考。

SQL Server数据库中的变量可以加载TOP字句之后,下文将对TOP字句加SQL变量的相关问题进行讨论,供您参考,希望对您学习SQL数据库有所帮助。

SQL Server2005开始,TOP子句后可以跟常量或者变量,跟常量时可省略括号,即top(2)和top 2是等价的(注意不加括号时top和2间的空格),top后使用SQL变量时必须使用括号,例:
Sql代码
declare @num int  
set @num = 10   
select top(@num) * from sys.tables  

declare @num int
set @num = 10
select top(@num) * from sys.tables

使用动态SQL为:
Sql代码
declare @num int  
set @num = 10   
declare @str nvarchar(1000)   
set @str = 'select top('+cast(@num as nvarchar(10))+') * from sys.tables'  
exec(@str)  

declare @num int
set @num = 10
declare @str nvarchar(1000)
set @str = 'select top('+cast(@num as nvarchar(10))+') * from sys.tables'
exec(@str)

关于exec的一些备注:
1.使用exec命令时,括号中只允许包含一个字符变量,或者一个字符串文本,或者字符串变量与字符串文本的串联。不能在括号中使用函数或CASE表达式,所以最好将代码放在一个变量中,再把此SQL变量作为exec命令的参数
2.exec(<string>)不提供接口,因此动态批处理不能访问在调用批处理中定义的局部变量,必须把变量内容串联到字符串中,就像上面的例子一样。上面动态SQL的例子如果写为 Sql代码
set @str = 'select top('+@num +') * from sys.tables';   
exec(@str)  

set @str = 'select top('+@num +') * from sys.tables';
exec(@str)
则会报错
3.同样的exec也不支持输出参数,如果要把输入放进一个SQL变量,必须先把输入插入一个目标表,然后再从目标表例取值赋给该变量

 

 

【编辑推荐】

Transact-SQL变量的声明

设置Transact-SQL变量中的值

SQL变量定义赋值及调用

SQL中的指示变量及数组变量

SQL中系统变量的应用实例

责任编辑:段燃 来源: 互联网
相关推荐

2010-07-23 14:11:18

SQL Server

2010-11-10 15:23:55

SQL SERVER

2010-07-26 14:09:32

SQL Server

2010-11-25 10:00:33

MySQL查询缓存

2010-09-10 09:47:14

SQL变量指示

2010-09-08 17:29:37

SQL表变量

2010-09-28 14:06:43

Sql Server表

2010-09-28 11:48:36

SQL NULL值

2010-05-07 12:20:38

负载均衡etag

2010-07-27 14:55:29

Telnet 23

2010-08-03 17:32:54

Linux NFS

2011-09-07 16:12:06

Ubuntugedit

2011-08-19 10:24:46

SQL Server Top新用途

2010-07-19 09:40:59

SQL Server数

2010-09-13 13:19:16

Sql Server分

2009-11-30 17:40:17

VS2003 ASP

2010-09-10 10:39:00

SQL变量声明

2010-11-12 10:53:41

sql server表

2010-11-12 10:23:05

SQL Server变

2009-12-28 09:26:50

点赞
收藏

51CTO技术栈公众号