2014-10-27 18 views
0

我有兩個表,包含一些信息(包括Rol表的外鍵)的用戶表,以及包含ID和名稱的Rol表本身。基於外鍵的存儲過程返回值

我一個使用以下過程填充數據集:

ALTER PROCEDURE [dbo].[pa_select_usuario] 



AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    SELECT id_usuario, nombre_1, nombre_2, apellido_1,apellido_2, genero, correo, 
             cedula, telefono ,rol, estado 

    FROM beca_seguridad_usuarios 



END 

唯一的問題是,在表我填充ROL值是INT(把rol表的ID),而餘寧願它顯示名稱。

有沒有辦法返回所有這些值,而不是發送參數@rol_name的rol字段? 其中@rol_name =從表ROL相匹配的ID

顯然是錯誤的,但像一些名字:

SELECT id_usuario, nombre_1, nombre_2, apellido_1,apellido_2, genero, correo, 
            cedula, telefono ,estado 

FROM beca_seguridad_usuarios 


SELECT nombre FROM beca_seguridad_roles WHERE id_rol = beca_seguridad_usuarios.rol 


Return id_usuario, nombre_1, nombre_2, apellido_1,apellido_2, genero, correo, 
            cedula, telefono, nombre, estado 

我很抱歉,如果他的答案似乎很明顯,我有點新到SQL,所以任何建議都會很棒。

編輯:

這是怎麼了,填補在Visual Studio中的表,如果它是相關的:

public IEnumerable<Usuario> GetAll() 
{ 
    List<Usuario> lstUsuario = null; 

    SqlCommand cmd = new SqlCommand(); 

    DataSet ds = DBAccess.ExecuteSPWithDS(ref cmd, "pa_select_usuario"); 

    if (ds.Tables[0].Rows.Count > 0) 
    { 
     lstUsuario = new List<Usuario>(); 
     foreach (DataRow dr in ds.Tables[0].Rows) 
     { 
      lstUsuario.Add(new Usuario 
      { 
       Id = Convert.ToInt32(dr["id_usuario"]), 
       Nombre = dr["nombre_1"].ToString(), 
       SegundoNombre = dr["nombre_2"].ToString(), 
       PrimerApellido = dr["apellido_1"].ToString(), 
       SegundoApellido = dr["apellido_2"].ToString(), 
       Genero = dr["genero"].ToString(), 
       Correo = dr["correo"].ToString(), 
       Cedula = Convert.ToInt32(dr["cedula"]), 
       Telefono = dr["telefono"].ToString(), 
       Rol = Convert.ToInt32(dr["rol"]), 
       Estado = Convert.ToInt32(dr["estado"]) 
      }); 
     } 
    } 

    return lstUsuario; 
} 

回答

1

你可以參加在單個查詢兩個表,返回期望的結果設置相關數據:

ALTER PROCEDURE dbo.pa_select_usuario 
AS 

SELECT 
     bsu.id_usuario 
    , bsu.nombre_1 
    , bsu.nombre_2 
    , bsu.apellido_1 
    , bsu.apellido_2 
    , bsu.genero 
    , bsu.correo 
    , bsu.cedula 
    , bsu.telefono 
    , bsr.nombre 
    , bsu.estado 
FROM beca_seguridad_usuarios AS bsu 
JOIN beca_seguridad_roles AS bsr ON 
    bsr.id_rol = bsu.rol; 

GO