Ayuda con cursor

13/02/2007 - 21:15 por Rosario | Informe spam
Que tal, alguien me puede ayudar en esto, tengo este cursor el cual se
ejecuta casi bien y digo casi por que la parte del INSERT que es la que
me importa no funciona, espero y alguien me pueda decir en que estoy mal.

Muchas gracias por cualquier ayuda.




DECLARE @refnbr varchar(6)

DECLARE doctos_referencia CURSOR FOR

SELECT RefNbr from vmvwCobranzaVendedores
WHERE perpost in ('200612','200611','200610') and slsperid='35'

OPEN doctos_referencia

FETCH NEXT FROM doctos_referencia

INTO @refnbr

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT @refnbr

INSERT INTO com_referencia_doctos (id_calculo,docto_referencia,
tabla_referencia, monto, ponderacion_dias)
VALUES (2747,@refnbr,'tabla1',0, 0)

FETCH NEXT FROM doctos_referencia
INTO @refnbr

END

CLOSE doctos_referencia
DEALLOCATE doctos_referencia

Preguntas similare

Leer las respuestas

#6 Rosario
14/02/2007 - 03:43 | Informe spam
Alejandro Mesa escribió:
Mostrar la cita
Ok. Muchas gracias por la ayuda, el día de mañana lo intentaré como me
comentas. Y ya que estamos en esto, el hacer el "INSERT INTO...SELECT"
tiene mejor desempeño que usar cursores? en que caso se recomienda usa
cursores?

Por otra parte, que es mas conveniente, usar en un solo store procedure
mi código de unas 100 líneas aprox. o dividirlo en partes (en mi caso
serían 3 procedures)? que tiene mejor desempeño todo en uno o en partes?

Muchas graciias.
#7 Jose Mariano Alvarez
14/02/2007 - 12:37 | Informe spam
El Insert select es mucho mas eficiente que el cursor.
Siempre es recomendable evitar los cursores. Debes usarlos solo cuando no
quede otra alternativa.
Si funcionalmente tiene sentido te conviene dividirlo al igual que en
cualquier lenguaje de programacion sino deja todo junto.





Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Rosario" wrote in message
news:u3NO3J%
Mostrar la cita
#8 Rosario
14/02/2007 - 17:37 | Informe spam
Jose Mariano Alvarez escribió:
Mostrar la cita
Hola,

Así quedaría mi INSERT

DECLARE @nombre_tabla varchar(15), @id_calculo int

set @nombre_tabla='Cobranza'
set @id_calculo750

INSERT INTO com_referencia_doctos (
id_calculo,
docto_referencia,
tabla_referencia,
monto,
ponderacion_dias
)
SELECT
@id_calculo,
RefNbr,
@nombre_tabla,
0,
0
from
solmaster.herramientas.dbo.vmvwCobranzaVendedores
WHERE
perpost in ('200612','200611','200610') and slsperid='35'


Pero al ejecutarlo me marca el siguiente error:

Server: Msg 7391, Level 16, State 1, Line 8
The operation could not be performed because the OLE DB provider
'SQLOLEDB' was unable to begin a distributed transaction.
[OLE/DB provider returned message: No se puede dar de alta la nueva
transacción en el coordinador de transacciones especificado. ]


ya busqué este error en internet y ha hice lo que dice la página de
microsoft y esto sigue igual.

Como te pudiste dar cuenta estoy usando un linked server (solmaster) el
cual esta un un Windows 2000 y yo utilizo WinXP SP2 y es en este último
donde hice lo que iindica microsoft, mi pregunta es tengo que hacer lo
mismo que hice en XP en mi servidor Win2000?

Gracias.
#9 Jose Mariano Alvarez
14/02/2007 - 20:47 | Informe spam
Asegurate de que los DTC esten corriendo en ambos equipos y que las cuentas
usadas sean de adecuadas para poder realizar la transaccion.
Ojo que el documento de soporte dice DTS y esta mal.debe decir DTC




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Rosario" wrote in message
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida