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;
NULL     NULL     NULL     NULL



*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,

           --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

--Leer primer registro del cursor
/*    FETCH NEXT FROM CursorTablaTemp
   INTO
           @idULA,
           @Ula,
           @Operador,
           @TAtencion,
           @TSolucion,
           @EstadoUla,
           @idRegla,
           @Tabla,
           @idValoresCriterio,
           @idEscaladoULA,
           @NivelEscalado,
           @CondicionEscalado,
           @Tiempo,
           @EscalarA,
           @Proyecto,
           @EstadoProyecto,
           @Compania,
           @EstadoCompania
         --WHILE @@FETCH_STATUS = 0*/
   BEGIN          SELECT *
       FROM @TMP_REGLAS_ULA
   END
--Cerrar cursor
   CLOSE CursorTablaTemp
   DEALLOCATE CursorTablaTemp
END