Problema Funciones Deterministicas
Publicado por Manuel (2 intervenciones) el 16/08/2007 01:02:59
Deseo crear la siguiente función, pues es necesario para el funcionamiento de un sistema...
CREATE FUNCTION GIS_GENID_BAK (@VTABLENAME VARCHAR(20))
RETURNS INT
BEGIN
DECLARE @NEXT_ID INT
SELECT @NEXT_ID = MAKLASTID FROM GENMAKEID WHERE MAKTBLNAME = @VTABLENAME
IF (@NEXT_ID = 0)
BEGIN
SET @NEXT_ID = 1 ;
INSERT INTO GENMAKEID ( MAKTBLNAME , MAKLASTID ) VALUES(@VTABLENAME , @NEXT_ID )
END
ELSE
BEGIN
SET @NEXT_ID = @NEXT_ID + 1
UPDATE GENMAKEID SET MAKLASTID = @NEXT_ID WHERE MAKTBLNAME = @VTABLENAME
END
RETURN @NEXT_ID
END
pero me sale el siguiente error
Servidor: mensaje 443, nivel 16, estado 15, procedimiento GIS_GENID_BAK, línea 12
Uso no válido de operador con efectos secundarios o dependiente del tiempo en 'INSERT' dentro de una función.
Servidor: mensaje 443, nivel 16, estado 1, procedimiento GIS_GENID_BAK, línea 17
Uso no válido de operador con efectos secundarios o dependiente del tiempo en 'UPDATE' dentro de una función.
Alguien q tenga alguna idea de como solucionarlo, se lo agracederia mucho..
CREATE FUNCTION GIS_GENID_BAK (@VTABLENAME VARCHAR(20))
RETURNS INT
BEGIN
DECLARE @NEXT_ID INT
SELECT @NEXT_ID = MAKLASTID FROM GENMAKEID WHERE MAKTBLNAME = @VTABLENAME
IF (@NEXT_ID = 0)
BEGIN
SET @NEXT_ID = 1 ;
INSERT INTO GENMAKEID ( MAKTBLNAME , MAKLASTID ) VALUES(@VTABLENAME , @NEXT_ID )
END
ELSE
BEGIN
SET @NEXT_ID = @NEXT_ID + 1
UPDATE GENMAKEID SET MAKLASTID = @NEXT_ID WHERE MAKTBLNAME = @VTABLENAME
END
RETURN @NEXT_ID
END
pero me sale el siguiente error
Servidor: mensaje 443, nivel 16, estado 15, procedimiento GIS_GENID_BAK, línea 12
Uso no válido de operador con efectos secundarios o dependiente del tiempo en 'INSERT' dentro de una función.
Servidor: mensaje 443, nivel 16, estado 1, procedimiento GIS_GENID_BAK, línea 17
Uso no válido de operador con efectos secundarios o dependiente del tiempo en 'UPDATE' dentro de una función.
Alguien q tenga alguna idea de como solucionarlo, se lo agracederia mucho..
Valora esta pregunta


0