[SQL Server] Exemple d'utilisation de la commande GOTO

-- =============================================

-- Author:        Zouhaier KHARROUBI

-- Create date:   24/02/2017

-- Description:   Exemple d'utilisation de la commande GOTO

-- Enoncé     :   Insérer le contenu de la table #Produits_Temp dans la table #Produits

--                Le champ Num_Prodb est la clé primaire de la table #Produits

--                Ce champ est généré manuellement

-- =============================================

IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'tempdb..#Produits'))

      BEGIN

            DROP TABLE #Produits

      END

IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'tempdb..#Produits_Temp'))

      BEGIN

            DROP TABLE #Produits_Temp

      END

CREATE TABLE #Produits(

      [Num_Prod] [bigint] NOT NULL,

      [Ref_Prod] [varchar](15) NOT NULL,

      [Desc_Prod] [nvarchar](150) NULL,

CONSTRAINT [PK_#Produits] PRIMARY KEY NONCLUSTERED

(

      [Num_Prod] ASC

)

)

CREATE TABLE #Produits_Temp(

      [Ref_Prod] [varchar](15) NOT NULL,

      [Desc_Prod] [nvarchar](150) NULL

)

 

INSERT INTO #Produits_Temp(Ref_Prod,Desc_Prod)

SELECT Ref_Prod,Desc_Prod FROM (

SELECT 'Ref1' Ref_Prod,'DescRef1' Desc_Prod

UNION

SELECT 'Ref2' Ref_Prod,'DescRef2' Desc_Prod

UNION

SELECT 'Ref3' Ref_Prod,'DescRef3' Desc_Prod

UNION

SELECT 'Ref4' Ref_Prod,'DescRef4' Desc_Prod

) T1

 

DECLARE @Nbre_Lig AS INT

            ,@Num_Lig AS INT

SELECT @Nbre_Lig= COUNT(*) FROM #Produits_Temp

SELECT @Num_Lig = 0

 

Debut_Traitement:

SELECT @Num_Lig= @Num_Lig + 1

IF @Num_Lig<= @Nbre_Lig

      BEGIN

            INSERT INTO #Produits(Num_Prod,Ref_Prod,Desc_Prod)

            SELECT TOP 1(SELECT ISNULL(MAX(Num_Prod),0) + 1 FROM #Produits) Num_Prod,T1.Ref_Prod,T1.Desc_Prod FROM #Produits_Temp T1

            LEFT JOIN #Produits T2 ON T2.Ref_Prod=T1.Ref_Prod

            WHERE T2.Ref_Prod IS NULL

      END

ELSE

      BEGIN

            GOTO Fin_Traitement

      END

     

GOTO Debut_Traitement

 

Fin_Traitement:  

SELECT * FROM #Produits