[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