如下存储过程中,定义了游标执行循环,第一句是判断是否存在该存储过程,如果存在则删除,不存在则跳过。
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME='usp_CARRFORM2_SET_VAT_SERIALNO' AND TYPE='P')
DROP PROCEDURE usp_CARRFORM2_SET_VAT_SERIALNO
GO
CREATE PROCEDURE usp_CARRFORM2_SET_VAT_SERIALNO
@emp_id VARCHAR(40)
AS
DECLARE @line_id VARCHAR(40)
DECLARE @serial_id INT
DECLARE getVatAndSetSerialNo CURSOR
FOR
SELECT Line_ID FROM CARRFORM2_VAT WHERE FORM_NO IN
(SELECT FORM_NO FROM FM_FORM_APPROVE
WHERE FORM_KIND='CARR.FORM.2'
AND APP_EMP_ID=@emp_id
AND PHASE_ID='CARR.FORM.2.APPH.4'
AND APP_STATUS='U'
) ORDER BY FORM_NO,CREATED_DATE
OPEN getVatAndSetSerialNo
FETCH NEXT FROM getVatAndSetSerialNo INTO @line_id
WHILE @@FETCH_STATUS =0
BEGIN
SELECT @serial_id=Var_Num FROM CARRFORM2_Serial WHERE Var_Type=4
UPDATE CARRFORM2_VAT SET Serial_ID=@serial_id WHERE Line_ID=@line_id
UPDATE CARRFORM2_Serial SET Var_Num=Var_Num+1 WHERE Var_Type=4
FETCH NEXT FROM getVatAndSetSerialNo INTO @line_id
END
CLOSE getVatAndSetSerialNo
DEALLOCATE getVatAndSetSerialNo
GO