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 originalALTER PROCEDURE [dbo].[FSPM_ROL_PARTICIPANTES] @BLOQUE INT, @ROL INT, @INSTANCIA INT,@IDI VARCHAR(50), @ID_FAVORITA INT=0 AS
IF @INSTANCIA<>0
BEGIN
SET CONCAT_NULL_YIELDS_NULL OFF
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,
CASE WHEN R.PER IS NOT NULL THEN
PER.NOM + ' ' + PER.APE+ ' (' + PER.EMAIL + ')'
ELSE
(CASE WHEN R.PROVE IS NULL THEN
NULL
ELSE
PROVE.DEN
END)
END PARTNOM, NULL AS ID_CONTACTO
FROM PM_COPIA_ROL R WITH (NOLOCK)
LEFT JOIN PER WITH (NOLOCK) ON PER.COD=R.PER
LEFT JOIN PROVE WITH (NOLOCK) ON PROVE.COD=R.PROVE
WHERE R.INSTANCIA=@INSTANCIA AND R.BLOQUE=@BLOQUE AND R.ROL=@ROL AND R.COMO_ASIGNAR=2
SELECT RB.ROL,RB.BLOQUE,B.DEN BDEN
FROM PM_COPIA_ROL R WITH (NOLOCK)
INNER JOIN PM_COPIA_ROL_BLOQUE RB WITH (NOLOCK) ON RB.ROL= R.ID
INNER JOIN PM_COPIA_BLOQUE_DEN B WITH (NOLOCK) ON B.BLOQUE=RB.BLOQUE
WHERE R.INSTANCIA=@INSTANCIA AND R.BLOQUE=@BLOQUE AND R.ROL=@ROL AND R.COMO_ASIGNAR=2 AND B.IDI=@IDI
SET CONCAT_NULL_YIELDS_NULL ON
END
ELSE
BEGIN
DECLARE @SQL NVARCHAR(4000)
DECLARE @CNT INTEGER
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
IF @CNT = 0
SET @ID_FAVORITA = 0
SET @SQL = N'SELECT DISTINCT R.DEN RDEN, R.ID ROL, R.TIPO, R.RESTRINGIR, '
IF @ID_FAVORITA <> 0
SET @SQL = @SQL + 'CASE WHEN PF.PER IS NULL THEN PF.PROVE
ELSE PF.PER END PART,
CASE WHEN PF.PER IS NOT NULL THEN PER.NOM + '' '' + PER.APE+ '' ('' + PER.EMAIL + '')''
ELSE
(CASE WHEN PF.PROVE IS NULL THEN
NULL
ELSE
PROVE.DEN + '' ('' + CON.EMAIL + '')''
END)
END PARTNOM, CON.ID ID_CONTACTO '
ELSE
SET @SQL = @SQL + 'CASE WHEN R.PER IS NULL THEN R.PROVE
ELSE R.PER END PART,
CASE WHEN R.PER IS NOT NULL THEN PER.NOM + '' '' + PER.APE+ '' ('' + PER.EMAIL + '')''
ELSE
(CASE WHEN R.PROVE IS NULL THEN
NULL
ELSE
PROVE.DEN + '' ('' + CON.EMAIL + '')''
END)
END PARTNOM, CON.ID ID_CONTACTO '
SET @SQL = @SQL + ' FROM PM_ROL R WITH (NOLOCK)'
IF @ID_FAVORITA <> 0
SET @SQL = @SQL + ' LEFT JOIN PM_PARTICIPANTES_FAV PF WITH (NOLOCK) ON R.ID=PF.ROL
LEFT JOIN PER WITH (NOLOCK) ON PER.COD = PF.PER
LEFT JOIN PROVE WITH (NOLOCK) ON PROVE.COD=PF.PROVE'
ELSE
SET @SQL = @SQL + ' LEFT JOIN PER WITH (NOLOCK) ON PER.COD = R.PER
LEFT JOIN PROVE WITH (NOLOCK) ON PROVE.COD=R.PROVE'
SET @SQL = @SQL + ' LEFT JOIN CON WITH (NOLOCK) ON PROVE.COD=CON.PROVE AND CON.ID=R.CON
WHERE R.BLOQUE_ASIGNA=@BLOQUE AND R.ROL_ASIGNA=@ROL AND R.COMO_ASIGNAR=2'
IF @ID_FAVORITA <> 0
SET @SQL = @SQL + 'AND SOLICIT_FAV=@ID_FAVORITA'
print @sql
EXEC SP_EXECUTESQL @SQL,N'@BLOQUE INT, @ROL INT, @ID_FAVORITA INT',@BLOQUE=@BLOQUE, @ROL=@ROL, @ID_FAVORITA=@ID_FAVORITA
SELECT RB.ROL,RB.BLOQUE,B.DEN BDEN
FROM PM_ROL R WITH (NOLOCK)
INNER JOIN PM_ROL_BLOQUE RB WITH (NOLOCK) ON RB.ROL= R.ID
INNER JOIN PM_BLOQUE_DEN B WITH (NOLOCK) ON B.BLOQUE=RB.BLOQUE
WHERE R.BLOQUE_ASIGNA=@BLOQUE AND R.ROL_ASIGNA=@ROL AND R.COMO_ASIGNAR=2 AND B.IDI=@IDI
END
Alguien me puede ayudar?