AYUDA CREAR FUNCION SPLIT Y LLAMARLA DESDE PROCEDIMIENTO ALMACENADO

tema enviado por ergluque en SQL
tema iniciado el 06/10/2009

Solicito de su colaboracion para que por favor me ayude a implementar el siguiente procedimiento almacenado.

1. Necesito poder ejecutar la funcion SPLIT para poder INSERTAR los datos en una tabla temporal.
2. El campo al cual necesito pasarle la funcion SPLIT es *idValoresCriterio, *este campo contiene valores de la siguiente forma: *123;200;500;*. Notese que estan separados por punto y coma (;).  Es decir necesito separar cada uno de esos valores e insertarlos de foRma individual en una tabla temporal sin el punto y coma (;).


*idRegla   idUla      tabla         IdvaloresCriterio*
   22           8            Usuarios        150;
   24          9            TiposCaso       2;3;
   25          9            Usuarios         177;186;188;
   26         10           Sitios              127;
   27         10           Usuarios         193;234;
   28         9             Sitios              101; 
   29        11           TiposCaso        3;
   30        11           Usuarios         211;
   31        12          TiposCaso        3;
   32         7           Usuarios         136;151;
   33        14          TiposCaso        2; 
   34        15          TiposCaso       2;
   35         7           Sitios            103; 


*Los datos que se inserten en la tabla temporal deben quedar asi:

**  idRegla   idUla                    tabla                    IdvaloresCriterio*
        22        8                     Usuarios                          150
        24        9                      TiposCaso                         2 
        24        9                     TiposCaso                          3
        25        9                     Usuarios                          177
        25        9                     Usuarios                          186 
        25        9                    Usuarios                          188
        26      10                    Sitios                               127
        27      10                   Usuarios                           193
        27      10                   Usuarios                           234
        28       9                     Sitios                                101
        29     11                   TiposCaso                            3
        30     11                  Usuarios                             211 
        31     12                 TiposCaso                              3
        32     7                   Usuarios                             136
        32     7                  Usuarios                               151 
        33     14                TiposCaso                             2
        34     15                TiposCaso                             2
        35     7                  Sitios                                 103

*



*
/****** Object:  StoredProcedure [dbo].[sp_reglas_ula]    Script Date: 09/29/2009 14:14:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[sp_reglas_ula]

@mensaje varchar(100) = null OUTPUT

AS
BEGIN
   --Declarar variables
   DECLARE   @idULA AS INT
   DECLARE   @Ula AS VARCHAR(50)
   DECLARE   @Operador AS CHAR(3)
   DECLARE    @TAtencion AS INT
   DECLARE    @TSolucion AS INT
   DECLARE    @EstadoUla AS CHAR(10)
   DECLARE    @idRegla AS INT
   DECLARE    @Tabla AS VARCHAR(50)
   DECLARE    @idValoresCriterio AS NVARCHAR(50)
   DECLARE    @idEscaladoULA AS INT
   DECLARE    @NivelEscalado AS INT
   DECLARE    @CondicionEscalado AS CHAR(10)
   DECLARE    @Tiempo AS INT
   DECLARE   @EscalarA AS VARCHAR(50)
   DECLARE   @IdProyecto AS INT
   DECLARE   @Proyecto AS VARCHAR(80)
   DECLARE   @EstadoProyecto AS CHAR(10)
   DECLARE   @Compania AS VARCHAR(100)
   DECLARE   @EstadoCompania AS CHAR(10)
  --Tabla temporal @TMP_REGLAS_ULA
   DECLARE @TMP_REGLAS_ULA TABLE
   (
       --Campos que tendra la tabla @TMP_REGLAS_ULA
       idULA INT,
       Ula VARCHAR(50),
       Operador CHAR(3),
       TAtencion INT,
       TSolucion INT,
       EstadoUla CHAR(10),
       idRegla INT,
       Tabla VARCHAR(50),
       idValoresCriterio nVARCHAR(50),
       idEscaladoULA INT,
       NivelEscalado INT,
       CondicionEscalado CHAR(10),
       Tiempo INT,
       EscalarA VARCHAR(50),
       IdProyecto INT,
       Proyecto VARCHAR(80),
       EstadoProyecto CHAR(10),
       Compania VARCHAR(100),
       EstadoCompania CHAR(10)
   )

   --INSERTAR EN LA TABLA TEMPORAL @TMP_REGLAS_ULA
   INSERT INTO @TMP_REGLAS_ULA
   (
           --Campos de la tabla ULAS
           idULA,
           ULA,
           Operador,
           TAtencion,
           TSolucion,
           EstadoUla,

           --Campos de la tabla REGLASULA
           idRegla,
           Tabla,
           idValoresCriterio, ---

           --Campos de la ESCALADOSULA
           idEscaladoULA,
           NivelEscalado,
           CondicionEscalado,
           Tiempo,
           EscalarA,

           --Campos de la tabla PROYECTOS
           IdProyecto,
           Proyecto,
           EstadoProyecto,

           --Campos de la tabla COMPANIAS
           Compania,
           EstadoCompania
   )
         --Seleccion de los campos
       SELECT            --Campos de la tabla ULAS
           idULA,
           ULA,
           Operador,
           TAtencion,
           TSolucion,
           EstadoUla,

           --Campos de la tabla REGLASULA
           idRegla,
           Tabla,
           idValoresCriterio, --ESTE CAMPO NECESITA LA FUNCION SPLIT

           --Campos de la tabla ESCALADOSULA
           idEscaladoULA,
           NivelEscalado,
           CondicionEscalado,
           Tiempo,
           EscalarA,

           --Campos de la tabla PROYECTOS
           IdProyecto,
           Proyecto,
           EstadoProyecto,

           --Campos de la tabla COMPANIAS
           Compania,
           EstadoCompania
       FROM   V_Ulas_Reglas --Esto es una vista

--Declarar cursor de la tabla temporal
   DECLARE CursorTablaTemp CURSOR FOR


       SELECT            --Campos de la tabla ULAS
           idULA,
           ULA,
           Operador,
           TAtencion,
           TSolucion,
           EstadoUla,

           --Campos de la tabla REGLASULA
           idRegla,
           Tabla,
           idValoresCriterio,

           --Campos de la tabla ESCALADOSULA
           idEscaladoULA,
           NivelEscalado,
           CondicionEscalado,
           Tiempo,
           EscalarA,

           --Campos de la tabla PROYECTOS
           idproyecto,
           Proyecto,
           EstadoProyecto,

           --Campos de la tabla COMPANIAS
           Compania,
           EstadoCompania

       FROM @TMP_REGLAS_ULA

set @mensaje = 'Selecciona valores en tabla @TMP_REGLAS_ULA'
print @mensaje;


--Abrir cursor
   OPEN CursorTablaTemp 

   BEGIN         

 SELECT *
       FROM @TMP_REGLAS_ULA
   END
--Cerrar cursor
   CLOSE CursorTablaTemp
   DEALLOCATE CursorTablaTemp
END