SQL 的一个问题
求一个SQL算法,
表:
create table ymtable
(
id char(7) not null ,
Role1 bit not null ,
Role2 bit not null ,
Role3 bit not null ,
);
就是一个角色的表,
我想写一个取数据的过程:
带入一个ID参数,返回一个int 或者char型的
角色数据,(要求该数据能唯一确定角色,即顺序,值唯一确定)
例如:
4: 那么数据相应是:role1/0 role2/0 role3/1
--------------
想了很久,只觉得用循环来做比较好,但是不知道该如何,能一次的获取各个数据
例如: select * from mytable where id='0000001'
返回的是该条记录,,问,是否有索引直接获取这条记录中的各字段值?
(只查询一次数据库,如果是select @role= role1 from mytable where id='0000001'
..重复,这样,的方法,就太不效率了,有n个字段要查询
n-1次表,就蛋疼了,求高手给个好点得法子。谢谢)
[解决办法]
不用写过程,直接select role1,role2.role3 from tb where id=4如果真想写过程create function getRole(@id)returns @tb table(role1 bit,role2 bit,role3 bit)asbegininsert @tb select role1,role2.role3 from tb where id=@idreturnend用的时候select * from dbo.getRole(4)
[解决办法]
突然明白了你的意思
--首先保证id=4的数据唯一性create function getRole(@id)returns char(20)asbegindeclare @role char(20)set @role=''select @role=@role+'role1/'+role1+' ' from tb where id=@idselect @role=@role+'role2/'+role2+' ' from tb where id=@idselect @role=@role+'role3/'+role3+' ' from tb where id=@idreturn @roleend用的时候select dbo.getRole(4)
[解决办法]
刚才的有点错误,修改了一下
过程,
create function getRole(@id int) returns varchar(100) as begin declare @role varchar(100) set @role='' select @role=@role+'role1/'+cast(role1 as varchar)+' ' from tb where id=@id select @role=@role+'role2/'+cast(role2 as varchar)+' ' from tb where id=@id select @role=@role+'role3/'+cast(role3 as varchar)+' ' from tb where id=@id return @role end
[解决办法]
楼上的,你写那么多和下面这句有区别么?
select 'role1'+role1+' '+'role2'+role2+' '+'role3'+role3 from tb where...
[解决办法]