select top 1 @a = glass_amount from glass_lable where lable_ID not in (select top @n lable_ID from glass_lable)想把第@n+1条记录的glass_amount列的值附给@a,该如何写?

解决方案 »

  1.   

    declare @n int,@a varchar(40)
    set @n=5
    set @a=''
    exec 'select top 1 '+@a+' = glass_amount from glass_lable where lable_ID not in (select top '+rtrim(@n)+' lable_ID from glass_lable)'
      

  2.   

    --猜一个
    declare @s nvarchar(200)
    set @s='select top '+@n+'+1 @a=glass_amount from glass_lable order by lable_ID desc'
    exec sp_executesql @s,N'@a int output',@a output
    select @a
      

  3.   

    提示在 select top 1附近有语法错误
      

  4.   

    declare @s nvarchar(8000),@a int
    set @s = 'select top 1 @a = glass_amount from glass_lable where lable_ID not in (select top '+ltrim(@n)+' lable_ID from glass_lable)'
    exec sp_executesql @s,'@a int output',@a outselect @a
      

  5.   


    的确写错了declare @n int
    set @n=5
    exec 'declare @a varchar(40) ;select top 1 @a = glass_amount from glass_lable where lable_ID not in (select top '+rtrim(@n)+' lable_ID from glass_lable)'
      

  6.   


    我是想第@n+1条记录的那一列的值,这里的top'+@n+'+1是不是应该会有多个。我按照你的意思改成
    set @sqls=' select top 1 @m = glass_amount from glass_lable where lable_ID not in (select top ' +@n+ ' lable_ID from glass_lable)';
    exec sp_executesql @sqls,N'@m int output',@m output
    select @m
    提示:
    服务器: 消息 245,级别 16,状态 1,过程 UpdateGalss_lable2,行 28将 varchar 值 ' select top 1 @m = glass_amount from glass_lable where lable_ID not in (select top ' 转换为数据类型为 int 的列时发生语法错误。
      

  7.   

    已經排序了
    只會取排序的第一個值
    +@n+ 忘記轉換了
    +ltrim(@n)+
      

  8.   


    直接这样写,提示语法错误,改成:
    set @sqls='declare @a varchar(40) ;select top 1 @a = glass_amount from glass_lable where lable_ID not in (select top '+rtrim(@n)+' lable_ID from glass_lable)';
    exec sp_executesql @sqls,N'@a int output',@m output
    select @m
    但是因为要循环执行,提示:变量名 '@a' 已声明。
      

  9.   

    问题解决了,多谢各位前辈,给分
    set @sqls=' select top 1 @m = glass_amount from glass_lable where lable_ID not in (select top ' +ltrim(@n)+ ' lable_ID from glass_lable)';
         exec sp_executesql @sqls,N'@m int output',@m output