我學習SQL,我想你的建議,看看這個代碼編寫正確,或者更好的方式來做到這一點。 該腳本創建:SQL腳本 - 檢查一個IP已被列入黑名單
- 一個表來存儲被列入黑名單
- 一個存儲過程的IP地址,以便在4字節的
一個存儲過程,允許檢查隨地吐痰的IP地址,如果一個IP是黑色是否列出 請讓我知道!謝謝!
-- Black Listed Table CREATE TABLE UtlBlacklistedIPs ( octet1 TINYINT, octet2 TINYINT, octet3 TINYINT, octet4 TINYINT );
1 SPROC
-- Convert an IP address in 4 octet for db storing
CREATE PROCEDURE dbo.storeIPoctetsv1
@ip CHAR(15)
AS
BEGIN
SET NOCOUNT ON
INSERT UtlBlacklistedIPs(octet1, octet2, octet3, octet4)
SELECT
CONVERT(TINYINT, PARSENAME(@ip, 4)),
CONVERT(TINYINT, PARSENAME(@ip, 3)),
CONVERT(TINYINT, PARSENAME(@ip, 2)),
CONVERT(TINYINT, PARSENAME(@ip, 1))
END
2 SPROC
-- SPROC check if an IP address has been black listed
CREATE PROCEDURE dbo.sprocCheckIp
@ip CHAR(15)
AS
BEGIN
SET NOCOUNT ON
DECLARE
@octet1 tinyint,
@octet2 tinyint,
@octet3 tinyint,
@octet4 tinyint;
SET @octet1 = CONVERT(tinyint, PARSENAME(@ip, 4));
SET @octet2 = CONVERT(tinyint, PARSENAME(@ip, 3));
SET @octet3 = CONVERT(tinyint, PARSENAME(@ip, 2));
SET @octet4 = CONVERT(tinyint, PARSENAME(@ip, 1));
IF EXISTS (
SELECT octet1, octet2, octet3, octet4
FROM UtlBlacklistedIPs
WHERE
octet1 [email protected]
AND octet2 [email protected]
AND octet3 [email protected]
AND octet4 [email protected]
)
BEGIN
PRINT 'Ip: '[email protected]+' is black listed'
END
ELSE
BEGIN
PRINT 'Ip: '[email protected]+' is NOT black listed'
END
END
某些值
-- Insert dummy values
DECLARE @i INT
SET @i = 0
WHILE @i < 2000
BEGIN
EXEC dbo.storeIPoctetsv1 @ip = '204.71.34.21'
EXEC dbo.storeIPoctetsv1 @ip = '12.38.145.32'
EXEC dbo.storeIPoctetsv1 @ip = '127.0.0.1'
SET @i = @i + 1
END
使用SPROC
-- Use SPROc
EXEC dbo.sprocCheckIp '125.254.125.111' -- NOT black listed Ip
EXEC dbo.sprocCheckIp '204.71.34.21' -- black listed Ip
+1有趣的使用'PARSENAME' – 2010-07-28 06:37:50
商店的IPv4地址爲int(因爲那是它是什麼)。四部分的虛線表示只是一種表示。 – 2011-08-26 19:31:57