Error en trigger con cursor por fin Resuelto Gracias...

13/08/2006 - 19:28 por Rodrigo Bedoya | Informe spam
Hola Colegas

Por fin se resolvio el error que me estaba generando al crear un cursor
dentro de un trigger
gracias a la coloboracion de Alejandro Mesa y Maxi.

La ultima de sugerencia de Alejandro fue agregarle en la sintaxis del cursor
la palabra STATIC

Anexo el texto completo que me funciona en SQL2005

CREATE TRIGGER [dbo].[grabar] ON [dbo].[MOVD2006]

FOR INSERT

AS

RETURN

DECLARE @DOCUMENTO CHAR(2),

@NUMERO_CPB CHAR(8),

@LcSql nVARCHAR(200),

@ano CHAR(4),

@LcPar nVARCHAR(200),

@oper_crea char(10),

@cabecera cursor


SELECT @DOCUMENTO= ins.documento,

@NUMERO_CPB= ins.numero_cpb,

@ano=convert(char(4),YEAR(MDE_FEHCPB)) FROM INSERTED INS;

SET @LcSql=N'set @cabecera=CURSOR STATIC FOR SELECT OPER_CREA FROM
MOVG'+@ano+

' WHERE DOCUMENTO=@par1 AND NUMERO_CPB=@par2;open @cabecera ';

SET @LcPar=N'@par1 CHAR(2),@par2 CHAR(8),@cabecera cursor output';

exec sp_executesql @LcSql,@LcPar,@Documento,@numero_cpb,@cabecera output

if cursor_status('variable', '@cabecera') = 1

BEGIN

FETCH NEXT FROM @cabecera INTO @oper_crea

CLOSE @cabecera;

DEALLOCATE @cabecera;

END

RETURN





MIL GRACIAS A TODOS



RODRIGO BEDOYA ZULUAGA

BOGOTA-COLOMBIA

TEL 310-3495468
 

Leer las respuestas

#1 Maxi
13/08/2006 - 22:47 | Informe spam
Hola, de todas maneras mi recomendacion es que elimines el cursor. En tu
caso estas usando cursores por un diseño incorrecto en la base de datos,
dicho diseño incorrecto te obliga a usar cursores y sqldinamico, dos
tecnicas para nada recomendas por seguridad y performance.
ç
"Rodrigo Bedoya" escribió en el mensaje
news:
Hola Colegas

Por fin se resolvio el error que me estaba generando al crear un cursor
dentro de un trigger
gracias a la coloboracion de Alejandro Mesa y Maxi.

La ultima de sugerencia de Alejandro fue agregarle en la sintaxis del
cursor la palabra STATIC

Anexo el texto completo que me funciona en SQL2005

CREATE TRIGGER [dbo].[grabar] ON [dbo].[MOVD2006]

FOR INSERT

AS

RETURN

DECLARE @DOCUMENTO CHAR(2),

@NUMERO_CPB CHAR(8),

@LcSql nVARCHAR(200),

@ano CHAR(4),

@LcPar nVARCHAR(200),

@oper_crea char(10),

@cabecera cursor


SELECT @DOCUMENTO= ins.documento,

@NUMERO_CPB= ins.numero_cpb,

@ano=convert(char(4),YEAR(MDE_FEHCPB)) FROM INSERTED INS;

SET @LcSql=N'set @cabecera=CURSOR STATIC FOR SELECT OPER_CREA FROM
MOVG'+@ano+

' WHERE DOCUMENTO=@par1 AND NUMERO_CPB=@par2;open @cabecera ';

SET @LcPar=N'@par1 CHAR(2),@par2 CHAR(8),@cabecera cursor output';

exec sp_executesql @LcSql,@LcPar,@Documento,@numero_cpb,@cabecera output

if cursor_status('variable', '@cabecera') = 1

BEGIN

FETCH NEXT FROM @cabecera INTO @oper_crea

CLOSE @cabecera;

DEALLOCATE @cabecera;

END

RETURN





MIL GRACIAS A TODOS



RODRIGO BEDOYA ZULUAGA

BOGOTA-COLOMBIA

TEL 310-3495468




Preguntas similares