Sql server T-SQL上的顺序IP块
如何像上面那样通过T-SQL获得这些IP块?我试着用CTE块,但没有。你能建议怎么做吗 编辑:我写错了。不是CTE,是的 尝试使用理货表:Sql server T-SQL上的顺序IP块,sql-server,tsql,Sql Server,Tsql,如何像上面那样通过T-SQL获得这些IP块?我试着用CTE块,但没有。你能建议怎么做吗 编辑:我写错了。不是CTE,是的 尝试使用理货表: ;WITH t0 AS (SELECT 0 n UNION ALL SELECT 0) ,t1 AS (SELECT 0 n FROM t0 a CROSS JOIN t0 b) ,t2 AS (SELECT 0 n FROM t1 a CROSS JOIN t1 b) ,t3 AS (SELECT 0 n FROM t2 a C
;WITH t0 AS (SELECT 0 n UNION ALL SELECT 0)
,t1 AS (SELECT 0 n FROM t0 a CROSS JOIN t0 b)
,t2 AS (SELECT 0 n FROM t1 a CROSS JOIN t1 b)
,t3 AS (SELECT 0 n FROM t2 a CROSS JOIN t2 b)
,t (n) AS (SELECT -1 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM t3)
SELECT '10.' + CAST(t1.n AS NVARCHAR(3)) + '.' + CAST(t2.n AS NVARCHAR(3)) +'.1' AS IP
FROM t t1
CROSS JOIN t t2
WHERE t1.n BETWEEN 230 AND 249
ORDER BY t1.n, t2.n
我创建了另一个解决方案。也许这对其他人有帮助
CREATE FUNCTION fnTblATMList
(
@From INT,
@To INT
)
RETURNS @table TABLE (IP_Address NVARCHAR(50))
AS
BEGIN
Declare @third int
while (@From <= @To)
BEGIN
set @third = 1
while (@third <= 255)
BEGIN
INSERT INTO @table
select '10.' + CONVERT(nvarchar(3), @From) + '.' + CONVERT(NVARCHAR(3), @third) +'.2'
SET @third = @third + 1
END
SET @From = @From +1
END
RETURN
END
GO
另一种方法
;with seg as (
select
0 num
union all
select
num + 1
from
seg
where
num < 255
)
select
cast(seg1.num as varchar)
+ '.' + cast(seg2.num as varchar)
+ '.' + cast(seg3.num as varchar)
+ '.' + cast(seg4.num as varchar)
from
seg seg1,
seg seg2,
seg seg3,
seg seg4
where
seg1.num = 10 -- Really need to filter
and seg2.num between 230 and 249 -- on at least two of these
-- and seg3.num = '0' -- or the query will run
and seg4.num = 1 -- for a very long time
order by
seg1.num,
seg2.num,
seg3.num,
seg4.num
option (maxrecursion 0)
好的@juniorDev,您能告诉我们您尝试了什么查询,以及您想要准确阻止哪些IP吗?SQL Server有一个非常好地处理IP地址的功能。该函数名为ParseName——代码如上所示。我刚换了一个八位组。但我想要两个八位组。创建表诱惑i int,ip nvarchar50声明@i int set@i=1,同时@i<255开始插入诱惑选择@i,'10.239.+CONVERTNVARCHAR3,@i+'.1'集@i=@i+1 END select*从诱惑删除表诱惑@gvee解析名称是否可以使用SQL Server 2008?
;with seg as (
select
0 num
union all
select
num + 1
from
seg
where
num < 255
)
select
cast(seg1.num as varchar)
+ '.' + cast(seg2.num as varchar)
+ '.' + cast(seg3.num as varchar)
+ '.' + cast(seg4.num as varchar)
from
seg seg1,
seg seg2,
seg seg3,
seg seg4
where
seg1.num = 10 -- Really need to filter
and seg2.num between 230 and 249 -- on at least two of these
-- and seg3.num = '0' -- or the query will run
and seg4.num = 1 -- for a very long time
order by
seg1.num,
seg2.num,
seg3.num,
seg4.num
option (maxrecursion 0)