我有以下存储过程(在MS SQL中):
SET NOCOUNT ON DECLARE @Cuantos INT IF EXISTS ( SELECT TOP 1 * FROM IntProgramas WHERE cod_programa IN ( SELECT cod_programa FROM IntGrupo_programa WHERE cod_grupo IN ( SELECT cod_grupo FROM IntUsuarios WHERE cod_usuario = @cod_usuario ) ) ) BEGIN SET nocount ON SELECT P.cod_programa ,nb_programa ,descripcion ,secuencia ,P.Accion ,P.Controlador INTO #mitabla1 FROM IntProgramas P WHERE P.cod_programa IN ( SELECT cod_programa FROM Intgrupo_programa WHERE cod_grupo IN ( SELECT cod_grupo FROM Intusuarios WHERE cod_usuario=@cod_usuario ) ) SET nocount ON SELECT GP.cod_programa ,P.nb_programa ,P.descripcion INTO #mitabla2 FROM IntGrupo_Programa GP JOIN Intprogramas P on GP.cod_programa = P.cod_programa WHERE GP.cod_grupo IN (SELECT cod_grupo FROM Intusuarios WHERE cod_usuario=@cod_usuario SELECT @Cuantos = COUNT(*) FROM( SELECT nb_programa, descripcion FROM IntProgramas WHERE cod_programa in (select cod_programa from #mitabla1 union select cod_programa from #mitabla2))x /*si existe en ambas macheo*/ SELECT nb_programa, descripcion, P.cod_programa INTO #mitabla3 FROM IntProgramas P WHERE cod_programa in (SELECT cod_programa FROM #mitabla1 union SELECT cod_programa FROM #mitabla2) select t.nb_programa , t.descripcion , t.cod_programa , p.secuencia , ISNULL(et.cod_menu,0) as cod_menu , ISNULL(et.desc_menu,0) as desc_menu , ISNULL(et_sprog.cod_sub_menu_programa,0) AS cod_sub_menu_programa , ISNULL(et_sprov.desc_sub_menu,0) AS desc_sub_menu_N2 , p.Accion , p.Controlador from #mitabla3 t JOIN IntProgramas p ON t.cod_programa = p.cod_programa LEFT JOIN IntEstructura_sub_menu_programa et_sprog ON t.cod_programa = et_sprog.cod_programa LEFT JOIN IntEstructura_menu_Usuarios et ON et_sprog.cod_menu = et.cod_menu LEFT JOIN IntEstructura_sub_menu_Usuarios et_sprov ON et_sprog.cod_sub_menu_programa = et_sprov.cod_sub_menu WHERE et_sprog.cod_programa IS NOT NULL order by et.cod_menu, et_sprog.cod_sub_menu_programa, p.secuencia --gp.cod_grupo, drop table #mitabla1 drop table #mitabla2 drop table #mitabla3 END
我试图理解它,但当我到达线
union select cod_programa from #mitabla2))x
我不明白什么是x做任何帮助将是apreciated.我一直试图在部分运行SP以更好地理解流程,但这条线对我来说真的很复杂.
X是此子查询或派生表的别名:
( SELECT nb_programa, descripcion FROM IntProgramas WHERE cod_programa in (select cod_programa from #mitabla1 union select cod_programa from #mitabla2))