你试一下写法改成下面这样,我是从VS2003入手的,它自动生成的代码就这种格式,偶道行尚浅
ALTER PROCEDURE votepl
(
@voteid int,
@count int
)
AS
declare @s varchar(400)
set @s='
SELECT TOP 10 votepl.*
FROM (SELECT TOP '+ cast(@count as varchar)+' id,time, name, title, info
        FROM pl
        WHERE type = 2 AND gameid = @voteid
        ORDER BY id DESC) 
AS votepl
ORDER BY votepl.id'
exec (@s)

解决方案 »

  1.   

    你把@voteid 改成:'+cast(@voteid as varchar(4))+'
    @voteid 是外部声明的,但不是全局变量,你把他放在字符串里用是不行的,要在字符串里用,就要在字符串里声明
      

  2.   

    ALTER PROCEDURE votepl
    @Voteid int,@Count int
    AS
    Begin
    Declare @s Nvarchar(400)
    Set @s='
    SELECT TOP 10 votepl.*
    FROM (SELECT TOP @Count id,time, name, title, info
            FROM pl
            WHERE type = 2 AND gameid = @Voteid
            ORDER BY id DESC) 
    AS votepl
    ORDER BY votepl.id'
    Exec sp_executesql 
    @s,N'@Voteid int,@Count int',
    @Voteid,@count
    End
      

  3.   

    ---把原来回的帖过来,注意说明的地方declare @count int
    set @count=10declare @s Nvarchar(4000)
    set @s='
    SELECT TOP 10 votepl.*
    FROM 
    (
    SELECT TOP '+ cast(@count as varchar)+' id,time, name, title, info
            FROM pl
            WHERE type = 2 AND gameid = @voteid
            ORDER BY id DESC

    AS votepl
    ORDER BY votepl.id
    '
    exec sp_executesql @s
    ,N'@voteid int'          --这里是传递的变量的定义
    ,@voteid                 --这里是传递变量的
      

  4.   

    zjcxc(邹建)大哥能不能说一下
    ,N'@voteid int'          --这里是传递的变量的定义
    ,@voteid                 --这里是传递变量的
    这两句的具体意思,我想把nvarchar改成varchar结果提示错误.还请指点.