none
Scalar Functions includes DDL Sentences. RRS feed

  • Pregunta

  • Hola Chicos de su apoyo tengo una SCALAR FUNCTION, y contiene un INSERT, cuando ejecuto la creacion de la funcion me aparece el siguiente mensaje:

    Msg 443, Level 16, State 15, Procedure BloqueaRegistro, Line 36
    Invalid use of a side-effecting operator 'INSERT' within a function.

    CREATE FUNCTION dbo.BloqueaRegistro(
    	@RFC VARCHAR (20)
    	, @TDC	VARCHAR(20)
    	, @DI	VARCHAR(10)
    	, @DO	VARCHAR(10)	
    	, @IdUsuario	INT
    	, @Sistema		VARCHAR(100)
    	, @BanderaBloqueo	BIT
    )
    RETURNS BIT
    AS
    BEGIN
    	DECLARE @RESPONSE	BIT
    	SET @RESPONSE = 0;
    	--===================================
    	-- INICIA LA VALIDACION
    	--===================================
    	IF @BanderaBloqueo = 1
    		BEGIN
    			IF EXISTS(SELECT 1 FROM tblBloqueoRegistro WITH(NOLOCK) WHERE LTRIM(RTRIM(RFC)) = LTRIM(RTRIM(@RFC)) AND LTRIM(RTRIM(TDC)) = LTRIM(RTRIM(@TDC)))
    				BEGIN
    					SELECT top 1 @RESPONSE= Estatus 
    					FROM tblBloqueoRegistro WITH(NOLOCK) 
    					WHERE LTRIM(RTRIM(RFC)) = LTRIM(RTRIM(@RFC)) AND LTRIM(RTRIM(TDC)) = LTRIM(RTRIM(@TDC))
    
    				END
    			ELSE
    				BEGIN
    					INSERT INTO tblBloqueoRegistro (RFC, TDC, DI, DO, FechaBloqueo, Estatus)
    					SELECT LTRIM(RTRIM(@RFC)),LTRIM(RTRIM(@TDC)),LTRIM(RTRIM(@DI)),LTRIM(RTRIM(@DO)), GETDATE(), 1;
    
    					SET @RESPONSE = 1;
    				END
    		END
    	--===================================
    	-- FINALIZA LA VALIDACION
    	--===================================
    	RETURN @RESPONSE
    END

    La unica forma seria con SPs????

    Otra duda.. es posible llamar a un Store Procedure dentro de una funcion, y el  SP haga los INSERT/UPDATE/DELETE??


    Saludos y gracias.

    lunes, 11 de julio de 2016 17:22

Respuestas

  • No se puede. Una regla que tienen que cumplir las Funciones es que no pueden tener efectos colaterales. En otras palabras, no pueden hacer nada que modifique la información, ni directamente ni indirectamente a través de un SP.

    • Marcado como respuesta José De Alva viernes, 15 de julio de 2016 21:52
    lunes, 11 de julio de 2016 19:34