存储过程里面怎么使用变量啊。
alter procedure p_ppp
@tab varchar(100),
@num int
as
declare @tmp1 table(articleID int,nkey varchar(100))
select * from @tmp1 --这句没错
exec(N 'select top '+@num+ ' * from '+@tab)--这句也没错
exec(N 'select top '+@num+ ' * from @tmp1 ')--这句执行存储过程时出错,必须声明变量 '@tmp1 '
exec(N 'select top '+@num+ ' * from '+@tmp1)--这句创建存储过程时出错,必须声明变量 '@tmp1 '
go
我现在必须用组合语句,但是我这这两种写法都不能通过,我到底该怎么写呢??
我的目的就是能实现select top @num from @tmp1的效果,怎么写都不对。
------解决方案--------------------alter PROCEDURE p_news_TagsUsedGet-- p_news_TagsUsedGet 125,10,1
@classid int,--分类id
@num int,--取的个数
@order varchar--排序方式(按标签被使用次数排序numused,或按标签被浏览次数排序hits)
as
create table ## (articleID int,nkey varchar(100))--返回表
declare @id int,@nkey varchar(100)
declare c cursor for
select articleID,nkey from article where classid=@classid
open c
fetch next from c into @id,@nkey
while @@fetch_status = 0
begin
WHILE CHARINDEX( ', ',@nkey)> 0
BEGIN
INSERT INTO ##(articleID,nkey) VALUES(@id,LEFT(@nkey,CHARINDEX( ', ',@nkey)-1))
SET @nkey=RIGHT(@nkey,LEN(@nkey)-CHARINDEX( ', ',@nkey))
END
INSERT INTO ##(articleID,nkey) VALUES(@id,@nkey)
fetch next from c into @id,@nkey
end
close c
deallocate c
declare @sql nvarchar(500)
truncate table T_Tag
set @sql=N 'insert into T_Tag(Tag,ArticleNum) select top '+convert(nvarchar,@num)+N ' nkey,[num]=count(articleID) from ## group by nkey order by num desc '
exec sp_executesql @sql
print @sql
select Tag,ArticleNum from T_Tag
drop table ##
--insert into T_Tag(Tag,ArticleNum) select top @num nkey,[num]=count(articleID) from @tmp1 group by nkey order by num desc
GO