我的一个存储过程有如下语句:
declare @License_Num int          --用户数
declare @User_No int          --用户编号
declare @User_No_TMP int          --用户编号TMP
declare @License_No varchar(128)  --License序列号
declare @Entp_ID varchar(50)
declare @UName varchar(50)
declare @License_Count int
set @License_Num=12
set @UName='yanxr'
set @Entp_ID='10000000001'
SELECT @User_No_TMP=User_No FROM Tab_UserInfor WHERE User_No=@UName  AND User_No IN(SELECT TOP @License_Num User_No FROM Tab_UserInfor WHERE Entp_ID=@Entp_ID)提示:'@License_Num' 附近有语法错误。
@License_Num是动态选取前N个数据的变量,到底是什么问题呢?
还有就是@User_No_TMP= 这个地方提示 '=' 附近有语法错误。
怎么解决呢?
先谢谢各位大虾啊~~

解决方案 »

  1.   

    declare @sql varchar(200)
    set @sql='SELECT   @User_No_TMP=User_No   FROM   Tab_UserInfor   WHERE   User_Name='''+@UName+''' AND   User_No   
    IN(SELECT   TOP '+ltrim(@License_Num)+' User_No FROM Tab_UserInfor WHERE Entp_ID='''+@Entp_ID+'''' exec sp_executesql @sql,'@User_No_Tmp int output',@User_No_Tmp output
      

  2.   

    TOP n [PERCENT]n不能为变量吧,只能为常数
      

  3.   

    SELECT   @User_No_TMP=User_No   FROM   Tab_UserInfor   WHERE   User_No=@UName     AND   User_No   IN(SELECT   TOP   @License_Num   User_No   FROM   Tab_UserInfor   WHERE   Entp_ID=@Entp_ID)
    这里不能直接使用变量,要求必须采用字符串拼接的方式把其值先计算
      

  4.   

    TOP   n   [PERCENT] n不能为变量吧,只能为常数----------------
    2005里面可以用,2000里面不行,,,
      

  5.   

    参考declare   @License_Num   int                     --用户数 
    declare   @User_No   int                     --用户编号 
    declare   @User_No_TMP   int                     --用户编号TMP 
    declare   @License_No   varchar(128)     --License序列号 
    declare   @Entp_ID   varchar(50) 
    declare   @UName   varchar(50) 
    declare   @License_Count   int 
    set   @License_Num=12 
    set   @UName= 'yanxr ' 
    set   @Entp_ID= '10000000001 ' declare @str varchar(8000)
    set @str='SELECT  '+ @User_No_TMP+'=User_No   FROM   Tab_UserInfor   WHERE   User_No='+@UName
    select @str=@str+'     AND   User_No   IN(SELECT   TOP  '+ @License_Num+'   User_No   FROM   Tab_UserInfor   WHERE   Entp_ID='+@Entp_ID+')' exec(@str)
      

  6.   

    TO:≮西门潇洒≯执行时返回这样的错误:
    服务器: 消息 245,级别 16,状态 1,行 13
    将 varchar 值 'SELECT  ' 转换为数据类型为 int 的列时发生语法错误。
      

  7.   

    sql2000不支持变量的top 语句
      

  8.   

    SELECT   @User_No_TMP=User_No   FROM   Tab_UserInfor   WHERE   User_No=@UName     AND   User_No   IN(SELECT   TOP   (@License_Num)   User_No   FROM   Tab_UserInfor   WHERE   Entp_ID=@Entp_ID) 
    把TOP加上括號就行了吧
      

  9.   

    不要用top(不支持变量参数)实现。
    换SET ROWCOUNT @License_Num好了
    ——上述的几个做法在2000里都会有问题