Estoy a punto de cambiar un procedimiento almacenado basado en cursor a basado en conjunto. Casi, porque solo me queda una cosa por descubrir.La instrucción UPDATE utiliza EXEC para ejecutar un procedimiento almacenado para ESTABLECER un valor de columna
Utilizan un procedimiento almacenado llamado GetSequence
para consultar una tabla, actualizarla con un nuevo número de secuencia (antiguo + 1) y devolver el nuevo valor de número de secuencia. Esto no era un problema cuando usaban cursores porque asignaban el valor de salida a una variable, luego usaban la variable.
La única forma en que puedo pensar para mantener el nuevo procedimiento almacenado basado en el conjunto es ejecutar GetSequence
en una instrucción INSERT o UPDATE. Sin embargo, obtengo ese error maravillosamente específico, "Sintaxis incorrecta cerca de la palabra clave 'EXEC'", cuando intento eso.
Este es el código antiguo:
DECLARE @new_UD_campaignID BIGINT -- Get the new ud_lead_id for the new lead set
EXEC ppGlobal.dbo.Getsequence
'ud_campaign_id',
@new_UD_campaignID OUTPUT
DECLARE @OrderNum VARCHAR(9);
IF @corpCamp LIKE '%LEP%'
BEGIN
SELECT @OrderNum = ('L' + RIGHT('00000000' + CAST(@new_UD_campaignID AS VARCHAR(8)), 8))
END
ELSE
BEGIN
SELECT @OrderNum = ('C' + RIGHT('00000000' + CAST(@new_UD_campaignID AS VARCHAR(8)), 8))
END
Esto funciona, pero es muy lento porque está en un cursor y actualización de más de dos millones de filas.
miradasEl nuevo código que estoy tratando como este:
UPDATE @List
SET OrderNumBigInt = EXEC (ipCore.dbo.Getsequence
'ud_campaign_id',
@new_UD_campaignID OUTPUT)
no puedo encontrar ninguna documentación específica que indica que no se puede ejecutar un procedimiento almacenado dentro de una instrucción SELECT o UPDATE para establecer un valor de columna.
¿Alguien ha intentado algo similar, pero con éxito?
¿Qué versión de SQL Server? – JNK
¿Existe alguna razón por la que no pueda crear un UDF para su proceso getsequence para devolver los valores? – JNK
SQL Server 2008 R2 – JerryK