CREATE FUNCTION dbo.aif_calcipnwaddr
(
@strIp nvarchar(16) = NULL,
@strNwMask nvarchar(16) = NULL
)
RETURNS nvarchar(16)
AS
BEGIN
DECLARE @intPos int
DECLARE @intLen int
DECLARE @strIpOct nvarchar(16)
DECLARE @strNwOct nvarchar(16)
DECLARE @strNwAddr nvarchar(16)
SET @strNwAddr = ''
IF (@strIp NOT LIKE '%.%.%.%')
OR (@strNwMask NOT LIKE '%.%.%.%')
RETURN ''
WHILE (@strIp <> '')
AND (@strNwMask <> '')
BEGIN
SET @intPos = CHARINDEX('.', @strIp)
IF (@intPos > 0)
BEGIN
SET @intLen = @intPos - 1
SET @strIpOct = LEFT(@strIp, @intLen)
SET @intLen = LEN(@strIp) - @intPos
SET @strIp = RIGHT(@strIp, @intLen)
END
ELSE
BEGIN
SET @strIpOct = @strIp
SET @strIp = ''
END
IF (@strIpOct NOT LIKE '[0-9]')
AND (@strIpOct NOT LIKE '[0-9][0-9]')
AND (@strIpOct NOT LIKE '[0-9][0-9][0-9]')
RETURN ''
IF (@strIpOct > 254)
RETURN ''
SET @intPos = CHARINDEX('.', @strNwMask)
IF (@intPos > 0)
BEGIN
SET @intLen = @intPos - 1
SET @strNwOct = LEFT(@strNwMask, @intLen)
SET @intLen = LEN(@strNwMask) - @intPos
SET @strNwMask = RIGHT(@strNwMask, @intLen)
END
ELSE
BEGIN
SET @strNwOct = @strNwMask
SET @strNwMask = ''
END
IF (@strNwOct NOT LIKE '[0-9]')
AND (@strNwOct NOT LIKE '[0-9][0-9]')
AND (@strNwOct NOT LIKE '[0-9][0-9][0-9]')
RETURN ''
IF (@strNwOct > 255)
RETURN ''
SET @strNwAddr = @strNwAddr + CAST((CAST(@strIpOct AS int) & CAST(@strNwOct AS int)) AS nvarchar(3))
IF (@strIp <> '')
AND (@strNwMask <> '')
SET @strNwAddr = @strNwAddr + '.'
END
RETURN @strNwAddr
END
GO
GRANT EXECUTE ON [dbo].[aif_calcipnwaddr] TO [aiadmin]
GO