表一 :(basis_role)
roleid rolename
------ ---------
001 system
002 operater
表二 :(basis_user)
userid username roleid
-------- -------- --------
1001 Bruce_Lee 001,002
现在想得到一条用户1001的记录:
输出: 用户编号 用户名称 角色
1001 BruceLee system,operater 请问用Sql语句怎么实现?
roleid rolename
------ ---------
001 system
002 operater
表二 :(basis_user)
userid username roleid
-------- -------- --------
1001 Bruce_Lee 001,002
现在想得到一条用户1001的记录:
输出: 用户编号 用户名称 角色
1001 BruceLee system,operater 请问用Sql语句怎么实现?
表二 :(basis_user)
userid username roleid
-------- -------- --------
1001 Bruce_Lee 001
1001 Bruce_Lee 002
这方便点
@roleid varchar(50)
)
returns varchar(600)
as
begin
declare @r varchar(600)
declare @index int
set @index =0
set @r = (select top 1 rolename from basis_role where roleid = substring(@roleid,@index,CHARINDEX(',', @roleid, @index+1)))+';'
set @index = CHARINDEX(',', @roleid, @index+1)
while(CHARINDEX(',', @roleid, @index+1)<>0)
begin
set @r = @r + (select top 1 rolename from basis_role where roleid = substring(@roleid,@index+1,CHARINDEX(',', @roleid, @index+1)))+';'
set @index = CHARINDEX(',', @roleid, @index+1)
end
set @r = @r + (select top 1 rolename from basis_role where roleid = substring(@roleid,@index+1,len(@roleid)))
return @r
end
-----------------------------
SELECT userid, username, dbo.Getrolename(roleid) AS Expr1
FROM basis_user
先谢谢你的解答
那个roleid 从哪来?
我操作是:只给你一个userid , 你必须得出这个结果
有个函数是我在后台写的:根据menuid得到菜单名
GetMenuName(string menuid) ,不是象你一样在sql里面写的现在有个表 basis_user
userid username menuid
001 Bruce_Lee 1001
我现在想得到 结果 001 Bruce_Lee 菜单名
请问怎么做
strSelect=string.Format("select userid,username,case menuid when menuid then '{0}' end menuid from basis_user",GetMenuName(menuid))
就是调用函数的时候那个menuid参数怎么得,我这样写是不对的!你晓得!
帮忙看一下
declare @B char(100)
select @B=roleid from basis_user where userid ='1001'SET @A= N'select * from basis_role
where roleid in (' + @B +')'
exec (@A)不知道有没有写错还要的应该可以用程序加工加工
那个菜单名在basis_menu表里面
我讲清楚点:
表一: basis_menu
menuid menuname
------ --------
001
001001 菜单一
001002 菜单二
表二: basis_user
userid username menuid
------- -------- ------
001 terry_12 001
002 flyin2006 001001
现在要得到 如果用 select A.userid A.username B.menuname from basis_user a ,basis_menu b where a.menuid=b.menuid and rollid=001
得到结果不完善 ,所以我定义了函数GEtMenuName() 想得到结果
001 terry_12 根菜单
002 flyin2006 菜单一
我想用后台那个GetMenuName(string menuid )能不能实现?
你的可以 ,解决了
帮我看看后面那个问题谢谢
不知道是不是这个意思.
我对有些进行了修改
比如 menuid=001 menuname设为程序入口啊等
就是讲用你那个句子你得到的menuname有时候不符合
比如 select userid,username,(select menuname from basis_menu where menuid = a.menuid ) from basis_user where username=terry_12 得到menuname是空值!
根据menuid得到menuname 的一些自定义规则在我的GetMenuName;里面
可以用CASE去做.写成SQL自定义函数也可以的.
是的话我就 只有在写个sql函数了
要从后台函数中用到sql语句里面参数 肯定是不可能的
算了 自己写!
role , op
我的网站的权限控制就是这么做的 弄个角色定义表然后再价格 角色对应操作的表最后一个视图就搞定
(@gid VARCHAR(100))
RETURNS VARCHAR
AS
BEGIN
DECLARE @s VARCHAR(1000)
SET @s=''
SELECT @s=@s + ','+rolename FROM basis_role WHERE CHARINDEX(',' + roleid + ',' ,',' + @gid + ',')>0
SET @s=SUTFF(@s,1,1,'')
RETURN @s
END
SELECT userid,username,dbo.f_join(roleid) FROM basis_user