This is an example of how you can implement a security mechanism of not having overlapping IP ranges.It uses an AFTER TRIGGER. Copy the code and run each query in a batch of it's own.What you need to do later, is the run the ALTER TABLE and CREATE TRIGGER queries on your table after changing the relevant table names and column names.Good luck!-- Create original tableCREATE TABLE MyIPs ( IPID INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED, FromIP VARCHAR(15) NOT NULL, ToIP VARCHAR(15) NOT NULL )GO-- Populate original tableINSERT MyIPs ( FromIP, ToIP )SELECT '190.154.11.17', '190.156.180.25'GO-- Display content of original tableSELECT *FROM MyIPsGO-- Add conversion rules for IP octets to IP numberALTER TABLE MyIPsADD ipFrom AS CAST(16777216.0 * PARSENAME(FromIP, 4) + 65536 * PARSENAME(FromIP, 3) + 256 * PARSENAME(FromIP, 2) + PARSENAME(FromIP, 1) AS BIGINT), ipTo AS CAST(16777216.0 * PARSENAME(ToIP, 4) + 65536 * PARSENAME(ToIP, 3) + 256 * PARSENAME(ToIP, 2) + PARSENAME(ToIP, 1) AS BIGINT)GO-- Display content of altered tableSELECT *FROM MyIPsGO-- Now create a trigger to prevent overlapping IP rangesCREATE TRIGGER dbo.trgMyIPsON dbo.MyIPsAFTER UPDATE, INSERTASIF EXISTS ( SELECT * FROM dbo.MyIPs AS w INNER JOIN ( SELECT CAST(16777216.0 * PARSENAME(FromIP, 4) + 65536 * PARSENAME(FromIP, 3) + 256 * PARSENAME(FromIP, 2) + PARSENAME(FromIP, 1) AS BIGINT) AS ipFrom, CAST(16777216.0 * PARSENAME(ToIP, 4) + 65536 * PARSENAME(ToIP, 3) + 256 * PARSENAME(ToIP, 2) + PARSENAME(ToIP, 1) AS BIGINT) AS ipTo, IPID FROM inserted ) AS i ON i.ipFrom <= w.ipTo AND i.ipTo >= w.ipFrom AND i.IPID <> w.IPID ) BEGIN ROLLBACK TRAN RAISERROR('Overlapping IP ranges found.', 16, 1) ENDGO-- Inserting a new valid IP rangeINSERT MyIPs ( FromIP, ToIP )SELECT '191.154.11.17', '191.156.180.25'GO-- Display content of altered tableSELECT *FROM MyIPsGO-- Trying to insert an invalid IP rangeINSERT MyIPs ( FromIP, ToIP )SELECT '189.154.11.17', '192.156.180.25'GO-- Display content of altered tableSELECT *FROM MyIPsGO-- Clean upDROP TABLE MyIPsGO
N 56°04'39.26"E 12°55'05.63"