sqlserver 存储过程中的top+变量使用分析(downmoon)

存储过程中的TOP后跟一个变量会如何?


代码如下:

Create proc getWorkPlan2
(@intCounter int
,@lngUserID int)
as
select Top 5 lngWorkID,strWorkName,strExecHumanName,strBeginDate
from worklist where lngExecHumanID= @lngUserID
order by lngWorkID desc

现在想将这里的Top 5 改为变量· Top @intCounter
如下


代码如下:

ALTER proc getWorkPlan2
(@intCounter int
,@lngUserID int)
as  
)
exec sp_executesql ('select Top '+convert(varchar(10),@intCounter)+' lngWorkID,strWorkName,strExecHumanName,strBeginDate from worklist where lngExecHumanID= '
+convert(varchar(10),@lngUserID) +' order by lngWorkID desc '

老是提示 在关键字 'convert' 附近有语法错误。
OK!
于是改为


代码如下:

ALTER proc getWorkPlan2
(@intCounter int
,@lngUserID int)
as
declare @strCounter varchar(10)
set @strCounter=convert(varchar(10),@intCounter)
declare @strUserID varchar(10)
set @strUserID=convert(varchar(10),@lngUserID)
exec sp_executesql ('select Top '+@strCounter+' lngWorkID,strWorkName,strExecHumanName,strBeginDate from worklist where lngExecHumanID= '
+@strUserID +' order by lngWorkID desc '
)

后来,经saucer(思归)大哥提醒,发现可以用以下语句实现(sql2005/2008):


代码如下:

Alter proc getWorkPlan2
(
@intCounter int
,@lngUserID int
)
as
set rowcount @intCounter
select lngWorkID,strWorkName,strExecHumanName,strBeginDate
from worklist where lngExecHumanID= @lngUserID
order by lngWorkID desc

邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。

(0)

相关推荐

  • sqlserver 存储过程中的top+变量使用分析(downmoon)

    存储过程中的TOP后跟一个变量会如何? 复制代码 代码如下: Create proc getWorkPlan2 (@intCounter int ,@lngUserID int) as select Top 5 lngWorkID,strWorkName,strExecHumanName,strBeginDate from worklist where lngExecHumanID= @lngUserID order by lngWorkID desc 现在想将这里的Top 5 改为变量· To

  • SQLServer存储过程中事务的使用方法

    本文为大家分享了SQLServer存储过程中事务的使用方法,具体代码如下 create proc usp_Stock @GoodsId int, @Number int, @StockPrice money, @SupplierId int, @EmpId int, @StockUnit varchar(50), @StockDate datetime, @TotalMoney money , @ActMoney money , @baseId int, @Description nvarcha

  • PHP模板引擎Smarty中的保留变量用法分析

    本文实例讲述了PHP模板引擎Smarty中的保留变量用法.分享给大家供大家参考,具体如下: 在 Smarty 中,有一些保留变量,它们是不需要 PHP 脚本去分配就可以直接使用,即不用使用 $_tpl->assign('var','value') 去分配. 1.在模板中访问页面请求的变量 {$smarty.get.user} == $_GET['user'] {$smarty.post.user} == $_POST['user'] {$smarty.cookie.username} == $_

  • Sqlserver 存储过程中结合事务的代码

    复制代码 代码如下: --方式一 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[USP_ProcedureWithTransaction_Demo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[USP_ProcedureWithTransaction_Demo] GO -- ===================

  • sqlserver存储过程中SELECT 与 SET 对变量赋值的区别

    SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值.当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法.下表列出 SET 与 SELECT 的区别.请特别注意红色部分.   set select 同时对多个变量同时赋值 不支持 支持 表达式返回多个值时 出错 将返回的最后一个值赋给变量 表达式未返回值 变量被赋null值 变量保持原值 下面以具体示例来说明问题:create table chinadba1(userid int ,addr varchar(1

  • sqlserver 存储过程中If Else的用法实例

    现在要通过编程向B表中插入数据,可是在程序中是不允许给Int类型赋空值的如果不赋值就默认为0.为了解决这个问题,用到了存储过程的If Else,下面是完整的存储过程. 代码示例: 复制代码 代码如下: create PROCEDURE [dbo].[P_Form_Control_Info_Add]    @TypeName varchar(20),    @Description varchar(50),    @CtlColSpan int,    @Sort int,    @SourceI

  • mysql 存储过程中变量的定义与赋值操作

    一.变量的定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end 块中使用,变量必须定义在复合语句的开头,并且是在其它语句之前,也可以同时申明多个变量,如果需要,可以使用default赋默认值. 定义一个变量语法如下: declare var_name[,...] type[default value]看一个变量定义实例 declare last date;二.mysql存储过程变量赋值 变量的赋值可直接赋值与查询赋值来操作,直接赋值可以用set

  • 浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅在类中生效.即只在存储过程中的begin和end之间生效. 2.@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被调用的存储过程或者代码之间共享数据.如何理解呢?可以看下面这个简单例子,很好理解. (1)先执行下面脚本,创建一

  • SqlServer快速检索某个字段在哪些存储过程中(sql 语句)

    代码如下所示: SELECT obj.Name 存储过程名, sc.TEXT 存储过程内容 FROM syscomments sc INNER JOIN sysobjects obj ON sc.Id = obj.ID WHERE sc.TEXT LIKE '%自己要查的内容%' 以上所述是小编给大家介绍的SqlServer快速检索某个字段在哪些存储过程中,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • mysql创建存储过程实现往数据表中新增字段的方法分析

    本文实例讲述了mysql创建存储过程实现往数据表中新增字段的方法.分享给大家供大家参考,具体如下: 需求: 往某数据库的某个表中新增一个字段(若该字段已存在,则不做操作:若该字段不存在,则新增) 百度了n久,没有符合要求的例子,只有参考加自己琢磨,最终终于给弄出来了,以下是几个版本的更迭 第一版: DELIMITER $$ CREATE PROCEDURE insert_column() BEGIN IF NOT EXISTS(SELECT 1 FROM information_schema.c

随机推荐