日期:2014-05-18  浏览次数:20464 次

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次表,就蛋疼了,求高手给个好点得法子。谢谢)

   
 

------解决方案--------------------
SQL code
不用写过程,直接
select role1,role2.role3 from tb where id=4

如果真想写过程
create function getRole(@id)
returns @tb table(role1 bit,role2 bit,role3 bit)
as
begin
insert @tb select role1,role2.role3 from tb where id=@id
return
end

用的时候
select * from dbo.getRole(4)

------解决方案--------------------
突然明白了你的意思
SQL code
--首先保证id=4的数据唯一性
create function getRole(@id)
returns char(20)
as
begin
declare @role char(20)
set @role=''
select @role=@role+'role1/'+role1+' ' from tb where id=@id
select @role=@role+'role2/'+role2+' ' from tb where id=@id
select @role=@role+'role3/'+role3+' ' from tb where id=@id
return @role
end

用的时候select dbo.getRole(4)

------解决方案--------------------
刚才的有点错误,修改了一下
过程,
SQL code
 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...
------解决方案--------------------
探讨

楼上的,你写那么多和下面这句有区别么?
select 'role1'+role1+' '+'role2'+role2+' '+'role3'+role3 from tb where...