Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Obtener valor en stored para seguir adelante

Estas en el tema de Obtener valor en stored para seguir adelante en el foro de SQL Server en Foros del Web. Hola, He programado un stored con el que obtengo unos datos, pero ahora necesito hacer un select count dentro del stored para que dependiendo del ...
  #1 (permalink)  
Antiguo 23/09/2013, 01:57
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años, 7 meses
Puntos: 7
Obtener valor en stored para seguir adelante

Hola,

He programado un stored con el que obtengo unos datos, pero ahora necesito hacer un select count dentro del stored para que dependiendo del valor que me devuelva poner una variable a 0 o dejarla con valor.

Este es el stored que tengo, queda comentado dentro del código del stored lo que necesito:
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[FSPM_ROL_PARTICIPANTES] @BLOQUE INT, @ROL INT, @INSTANCIA INT,@IDI VARCHAR(50), @ID_FAVORITA INT=0 AS
  2.  
  3. IF @INSTANCIA<>0
  4.     BEGIN
  5.     SET CONCAT_NULL_YIELDS_NULL OFF
  6.        SELECT R.DEN RDEN,R.ID ROL,R.TIPO,R.RESTRINGIR, CASE WHEN R.PER IS NULL THEN R.PROVE ELSE R.PER END PART,
  7.    CASE WHEN R.PER IS NOT NULL THEN
  8.        PER.NOM + ' ' + PER.APE+ ' (' + PER.EMAIL + ')'
  9.    ELSE
  10.        (CASE WHEN R.PROVE IS NULL THEN
  11.            NULL
  12.        ELSE
  13.            PROVE.DEN
  14.        END)
  15.    END PARTNOM, NULL AS ID_CONTACTO
  16.        FROM PM_COPIA_ROL R WITH (NOLOCK)
  17.    LEFT JOIN PER WITH (NOLOCK)  ON PER.COD=R.PER
  18.    LEFT JOIN PROVE WITH (NOLOCK)  ON PROVE.COD=R.PROVE
  19.    WHERE R.INSTANCIA=@INSTANCIA AND R.BLOQUE=@BLOQUE AND R.ROL=@ROL AND R.COMO_ASIGNAR=2
  20.  
  21.    SELECT RB.ROL,RB.BLOQUE,B.DEN BDEN
  22.    FROM PM_COPIA_ROL R WITH (NOLOCK)  
  23.    INNER JOIN PM_COPIA_ROL_BLOQUE RB WITH (NOLOCK)  ON RB.ROL= R.ID
  24.    INNER JOIN PM_COPIA_BLOQUE_DEN B WITH (NOLOCK)  ON  B.BLOQUE=RB.BLOQUE
  25.    WHERE R.INSTANCIA=@INSTANCIA AND R.BLOQUE=@BLOQUE AND R.ROL=@ROL AND R.COMO_ASIGNAR=2 AND B.IDI=@IDI
  26.     SET CONCAT_NULL_YIELDS_NULL ON
  27.     END
  28. ELSE
  29.     BEGIN
  30.     DECLARE @SQL NVARCHAR(4000)
  31.     DECLARE @CNT INTEGER
  32.    
  33.     SELECT COUNT(*) FROM PM_PARTICIPANTES_FAV WITH(NOLOCK) WHERE SOLICIT_FAV=@ID_FAVORITA 'necesito obtener la cantidad del count en la variable @CNT para luego realizar el if que tengo abajo
  34.    
  35.    IF  @CNT = 0
  36.         SET @ID_FAVORITA = 0
  37.        
  38.    SET @SQL = N'SELECT DISTINCT R.DEN RDEN, R.ID ROL, R.TIPO, R.RESTRINGIR, '
  39.    IF @ID_FAVORITA <> 0
  40.         SET @SQL = @SQL + 'CASE WHEN PF.PER IS NULL THEN PF.PROVE
  41.                         ELSE  PF.PER END PART,
  42.                             CASE WHEN PF.PER IS NOT NULL THEN PER.NOM + '' '' + PER.APE+ '' ('' + PER.EMAIL + '')''
  43.                             ELSE
  44.                                 (CASE WHEN PF.PROVE IS NULL THEN
  45.                                     NULL
  46.                                 ELSE
  47.                                     PROVE.DEN + '' ('' + CON.EMAIL + '')''
  48.                                 END)
  49.                         END PARTNOM, CON.ID ID_CONTACTO '
  50.     ELSE
  51.         SET @SQL = @SQL + 'CASE WHEN R.PER IS NULL THEN R.PROVE
  52.                         ELSE R.PER END PART,
  53.                             CASE WHEN R.PER IS NOT NULL THEN PER.NOM + '' '' + PER.APE+ '' ('' + PER.EMAIL + '')''
  54.                             ELSE
  55.                                 (CASE WHEN R.PROVE IS NULL THEN
  56.                                     NULL
  57.                                 ELSE
  58.                                     PROVE.DEN + '' ('' + CON.EMAIL + '')''
  59.                                 END)
  60.                         END PARTNOM, CON.ID ID_CONTACTO '
  61.      
  62.     SET @SQL = @SQL + ' FROM PM_ROL R WITH (NOLOCK)'   
  63.      
  64.     IF @ID_FAVORITA <> 0
  65.         SET @SQL = @SQL + ' LEFT JOIN PM_PARTICIPANTES_FAV PF WITH (NOLOCK) ON R.ID=PF.ROL
  66.              LEFT JOIN PER WITH (NOLOCK)  ON PER.COD = PF.PER
  67.              LEFT JOIN PROVE WITH (NOLOCK)  ON PROVE.COD=PF.PROVE'
  68.     ELSE
  69.         SET @SQL = @SQL + ' LEFT JOIN PER WITH (NOLOCK)  ON PER.COD = R.PER
  70.         LEFT JOIN PROVE WITH (NOLOCK)  ON PROVE.COD=R.PROVE'
  71.    
  72.     SET @SQL = @SQL + ' LEFT JOIN CON WITH (NOLOCK)  ON PROVE.COD=CON.PROVE AND CON.ID=R.CON
  73.         WHERE R.BLOQUE_ASIGNA=@BLOQUE AND R.ROL_ASIGNA=@ROL AND R.COMO_ASIGNAR=2'
  74.        
  75.     IF @ID_FAVORITA <> 0
  76.         SET @SQL = @SQL + 'AND SOLICIT_FAV=@ID_FAVORITA'
  77.        
  78.     print @sql
  79.     EXEC SP_EXECUTESQL @SQL,N'@BLOQUE INT, @ROL INT, @ID_FAVORITA INT',@BLOQUE=@BLOQUE, @ROL=@ROL, @ID_FAVORITA=@ID_FAVORITA
  80.    
  81.    SELECT RB.ROL,RB.BLOQUE,B.DEN BDEN
  82.    FROM PM_ROL R  WITH (NOLOCK)
  83.    INNER JOIN PM_ROL_BLOQUE RB WITH (NOLOCK)  ON RB.ROL= R.ID
  84.    INNER JOIN PM_BLOQUE_DEN B WITH (NOLOCK)  ON  B.BLOQUE=RB.BLOQUE
  85.    WHERE R.BLOQUE_ASIGNA=@BLOQUE AND R.ROL_ASIGNA=@ROL AND R.COMO_ASIGNAR=2 AND B.IDI=@IDI
  86.    END

Alguien me puede ayudar?
__________________
Gracias por todo;

Un saludo
  #2 (permalink)  
Antiguo 23/09/2013, 02:12
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años, 7 meses
Puntos: 7
Respuesta: Obtener valor en stored para seguir adelante

Ya he averiguado lo que queria. Para hacerlo dentro del select tengo que igualar la variable que declaro a lo que quiero obtener, es decir, tengo que hacer lo que se ve en el código de mas abajo:

Código SQL:
Ver original
  1. SELECT @CNT=COUNT(*) FROM PM_PARTICIPANTES_FAV WITH(NOLOCK) WHERE SOLICIT_FAV=@ID_FAVORITA

Si haciendo esto, en el mismo stored hago un print @CNT este me mostrara en valor de COUNT(*).

__________________
Gracias por todo;

Un saludo

Etiquetas: seguir, select, sql, stored, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:43.