存储过程基于外键返回值

时间:2014-10-27 00:58:35

标签: sql-server

我有两个表,一个包含一些信息的User表,包括Rol表的外键,以及包含id和名称的Rol表本身。

我使用以下过程填充DataSet:

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字段发送参数@rol_name? 其中@rol_name =具有匹配ID的表Rol中的名称

显然是错的,但有点像:

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上填写Table的方法,如果它是相关的:

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 个答案:

答案 0 :(得分: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