Disculpas por el titulo de este mensaje, pero la verdad que no sabia como
titularlo.
Tengo una tabla (un menú) de esta manera:
CREATE TABLE [dbo].[x_menu](
[pk_x_menu_id] [smallint] IDENTITY(1,1) NOT NULL,
[mnumodulo] [char](3) NOT NULL,
[mnugrupo] [char](10) NOT NULL,
[mnutal] [char](2) NOT NULL,
[mnucodigo] [char](6) NOT NULL,
[mnutexto] [char](40) NOT NULL,
[mnutecla] [char](1) NOT NULL,
[mnunivel] [decimal](2, 0) NOT NULL,
[mnuclave] [char](8) NOT NULL,
[mnuclavev] [bit] NOT NULL,
[mnuprg] [char](12) NOT NULL,
[mnufin] [bit] NOT NULL,
[mnuparam] [char](40) NOT NULL,
CONSTRAINT [pk_x_menu_id] PRIMARY KEY CLUSTERED
Lo importante es:
En mnumodulo se guarda a que modulo pertenece el menu
En mnunivel se guarda el nivel de acceso (puede ser un numero entre 0 menor
nivel y 99 mayor nivel)
Quiero saber los registros que cumplan esta condicion:
Para un usuario determinado tengo un string que me indica los modulos y el
nivel de acceso de cada modulo de la siguiente manera:
modulo,nivel;...
ejemplo:
GES,20;TES,99;CON,50;PRO,99;COS,99;HEX,99;PER,99;FRI,99;
Sacar los modulos de un usuario lo puedo hacer facilmente con un
procedimiento almacenado de esta manera:
USE [GRECCO_BASE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[x_menu_leer]
@modulo varchar(70)
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM x_menu WHERE @modulo LIKE '%'+mnumodulo+',%'
END
La Select es un tanto peculiar, ya que estoy acostombrado a poner los LIKE
al reves, pero funciona.
¿pero como podria hacer para sacar los registros considerando el nivel de
usuario por cada modulo, fijaros que el ejemplo tengo
GES,20;TES,99;CON,50;
Entonces quiero que me devuelva los registros con estas condiciones:
GES nivel 20
TES nivel 99
CON nivel 50
La verdad que estoy empezando seriamente a considerar en cambiar mi tabla de
usuarios y hacerme una tabla nueva de usuarios con modulos-niveles para que
sea mas facil esta consulta.
Bueno .. ¿Alguna idea?
Saludos,
Pablo Roca
La Coruna - Spain
http://www.portalfox.com
Leer las respuestas