Sql server T-SQL上的顺序IP块

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

如何像上面那样通过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 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)