Лучший ответ, который я нашел в T-SQL на данный момент, - это использование правил, изложенных в статье блога . Я использовал эти правила в функции, которая проверяет IP-адреса перед преобразованием их в большие целые числа, чтобы можно было искать страну, связанную с IP-адресом. Это было полезно, так как у меня не было контроля над входными значениями для IP-адреса, поэтому я не мог применять ограничения целостности данных в исходной системе. Ниже приведена копия функции, измененной так, что она возвращает 1, если IP-адрес действителен, и 0, если он недействителен.
CREATE FUNCTION dbo.udf_ValidateIPAddress
(@InputString VARCHAR(8000))
RETURNS TINYINT
AS
BEGIN
DECLARE @Return BIGINT = IIF(@InputString LIKE '%_.%_.%_.%_' -- 3 periods and no empty octets
AND @InputString NOT LIKE '%.%.%.%.%' -- not 4 periods or more
AND @InputString NOT LIKE '%[^0-9.]%' -- no characters other than digits and periods
AND @InputString NOT LIKE '%[0-9][0-9][0-9][0-9]%' -- not more than 3 digits per octet
AND @InputString NOT LIKE '%[3-9][0-9][0-9]%' -- NOT 300 - 999
AND @InputString NOT LIKE '%2[6-9][0-9]%' -- NOT 260 - 299
AND @InputString NOT LIKE '%25[6-9]%' -- NOT 256 - 259
, 1, 0)
RETURN @Return;
END