1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| ALTER PROCEDURE p_sel_ipdispo2
@netID VARCHAR(12),
@debPlage INT,
@finPlage INT
AS
BEGIN;
SET NOCOUNT ON
-- Si le @netID ne se termine pas par '.', on l'ajoute
IF @netID NOT LIKE '%.'
BEGIN;
SET @netID = @netID + '.';
END;
-- Recherche des IP dont le dernier octet est compris entre @debPlage et @finPlage
WITH
CTE_chercheIP AS
(
-- IP 192.168.200.140
SELECT @netID NetID, @debPlage Indice
UNION ALL
-- IP 192.168.200.141, 192.168.200.142, ... 192.168.200.160
SELECT @netID, Indice + 1
FROM CTE_chercheIP
WHERE Indice < @finPlage
)
-- Association de la colonne NetID avec la colonne Indice pour produire la liste des IPs
-- Exclusion des IP dans la table dbo.T_IP
SELECT @netID + CAST(Indice AS VARCHAR(3)) AS IP
FROM CTE_chercheIP
WHERE @netID + CAST(Indice AS VARCHAR(3)) NOT IN (SELECT Adresse FROM dbo.T_IP)
OPTION (MAXRECURSION 255);
END; |