如何在存储过程中给select top n中的n赋值?

水晶心 2003-03-13 03:33:56
比如给存储过程传个int参数@nValue int
然后在查询中调用 select top @nValue * from [mytab]
试了几次,总是提示有错,是不是 top后面非得跟数字不可?
如果在存储过程中生成字符串语句来调用,会不会影响存储过程的效率,比如每次执行新建的字符串时重新分析和执行语句,这样就失去存储过程的作用了,是不是这样呢?
...全文
99 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcsjx 2003-03-26
  • 打赏
  • 举报
回复
在存储过程中代入字符串exec和不是命令语句执行的效率相差无几.
pengdali 2003-03-14
  • 打赏
  • 举报
回复
楼主哇!你看看你原来的你发的贴!

我不是写了吗?????????你为什么要浪费你的分数呢????


http://expert.csdn.net/Expert/TopicView2.asp?id=1522778&datebasetype=now

exec('SELECT Top '+cast(@每页大小 as varchar)+' * FROM T WHERE SortField NOT IN (SELECT TOP '+cast(@每页大小* @页号 as varchar)+' SortField from T )')
水晶心 2003-03-14
  • 打赏
  • 举报
回复
我对于sql server对execute(字串)的执行效率不了解,一直没有用过,虽然这样很灵活,可是是否能达到所要求的效率呢?是不是每次运行都得对字串进行一次解读和确定查询计划呢?我觉得这仅仅是能执行而已,可能会影响到效率.
happydreamer 2003-03-13
  • 打赏
  • 举报
回复
不需要阿.我试了
exec test 10 能得到结果
ben988211 2003-03-13
  • 打赏
  • 举报
回复
类型转换
convert(varchar,@top)
caiyunxia 2003-03-13
  • 打赏
  • 举报
回复
create procedure AAAA
@top INT
AS
DECLARE @SQL
SET @SQL ='select top ' + cast(@top as varchar(10)) + ' * FROM TABLE'
EXECUTE(@SQL)
xxxman 2003-03-13
  • 打赏
  • 举报
回复
create procedure test @a int
as
exec('select top '+@a+'* from table')

@a 的类型要变一下
happydreamer 2003-03-13
  • 打赏
  • 举报
回复
create procedure test @a int
as
exec('select top '+@a+'* from table')
chpeng 2003-03-13
  • 打赏
  • 举报
回复
用变量传进去,转换成字符串后来执行
水晶心 2003-03-13
  • 打赏
  • 举报
回复
这个查询语句中带有两个top,
如select top 20 * from [mytab]
where [id] not in (select top 10 * from [mytab])
这样使用set来限定返回数恐怕不行,看来只有用生成字符串来执行了,不知用生成字符串执行是否会影响执行效率呢?
hjhing 2003-03-13
  • 打赏
  • 举报
回复
exec('select top ' + cast(@nValue as varchar) +' * from [mytab]')
Chiff 2003-03-13
  • 打赏
  • 举报
回复
只能用动态语句。

建议改成

declare @nvalue int
set @nvalue = 10

set rowcount @nvalue

select ...

set rowcount 0

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧