你试一下写法改成下面这样,我是从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)
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)
@voteid 是外部声明的,但不是全局变量,你把他放在字符串里用是不行的,要在字符串里用,就要在字符串里声明
@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
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 --这里是传递变量的
,N'@voteid int' --这里是传递的变量的定义
,@voteid --这里是传递变量的
这两句的具体意思,我想把nvarchar改成varchar结果提示错误.还请指点.