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