我有两个表,一个包含一些信息的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;
}
答案 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