select b.userid from bbs b inner join usr u on b.userid = u.userid where u.username like '%' + @sfor + '%'
to:zarge,我想还是我没有讲清楚,你那样的写法当然是可以的 像我自己写的那个: create procedure usrgroups @stype varchar(10) @sfor varchar(100) as if @stype="userid" select * from bbs b inner join usr u on b.userid = u.userid where u.username like '%' + @sfor + '%' else select * from bbs where @stype like '%' + @sfor + '%'就是因为bbs表存的是发贴人的userid而不是username(因为当初建库的时候听说用userid做关联效率高些),现在论坛已基本完工,不可能改库了,如果寸的是username的话,根本就不用判断@stype是不是"userid",直接写成select * from bbs where @stype like '%' + @sfor + '%'就可以了,象现在这样麻烦.......2楼这位能把视图写一下吗,我初学sql server,没有用过视图,谢谢了!
Create View UserBBS As select b.*, u.username from bbs b inner join usr u on b.userid = u.userid
基本明白了,还有一个地方: 像select * from bbs where @stype like '%' + @sfor + '%'这样写,就是用参数来代表列(这里用@stype代表topic或content),检查语法无错误,但调试的时候却不起作用,是不是列不能用参数动态表示的还是我的写法有问题?
Declare @cmd nvarchar(256) set @cmd = N'select * from bbs where ' + @stype + ' like ''%' + @sfor + N'%''' exec sp_executesql @cmd
where u.username like '%' + @sfor + '%'
像我自己写的那个:
create procedure usrgroups
@stype varchar(10)
@sfor varchar(100)
as
if @stype="userid"
select * from bbs b inner join usr u on b.userid = u.userid
where u.username like '%' + @sfor + '%'
else
select * from bbs where @stype like '%' + @sfor + '%'就是因为bbs表存的是发贴人的userid而不是username(因为当初建库的时候听说用userid做关联效率高些),现在论坛已基本完工,不可能改库了,如果寸的是username的话,根本就不用判断@stype是不是"userid",直接写成select * from bbs where @stype like '%' + @sfor + '%'就可以了,象现在这样麻烦.......2楼这位能把视图写一下吗,我初学sql server,没有用过视图,谢谢了!
As
select b.*, u.username from bbs b inner join usr u on b.userid = u.userid
像select * from bbs where @stype like '%' + @sfor + '%'这样写,就是用参数来代表列(这里用@stype代表topic或content),检查语法无错误,但调试的时候却不起作用,是不是列不能用参数动态表示的还是我的写法有问题?
set @cmd = N'select * from bbs where ' + @stype + ' like ''%' + @sfor + N'%'''
exec sp_executesql @cmd