广

MSSQL

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

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

    2018-05-03 14:16:44 次阅读 稿源:互联网
    零七网广告
    全网推广平台,软文发布
    存储过程中的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

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

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七网广告
    零七网广告
    零七网广告
    零七网广告