储存过程问题

hlq8210 2004-10-24 06:41:58
表结构 表名 NetIp; 列 Id (int);IpDress(Char)
Id为主键,且每插入一条记录,自动增1,IpDress存储的为Ip地址,现在表里有一天记录,IPDress值为202.10.10.221
写一存储过程插入300条记录且每插入一条记录,IpDress值在原来值增1,如(第一条记录IpDress值为202.10.10.221第二条记录IpDress值应为202.10.10.222,直到IpDress值为202.10.10.255后再增加一条记录时IpDress值为202.10.11.0)
请各位大虾帮帮小弟!!
...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2004-10-24
  • 打赏
  • 举报
回复
--示例

--示例表
create table NetIp(id int identity(1,1),IpDress char(15))
go

--插入处理
declare @IP char(15),@id int,@i bigint

select @IP='202.10.10.221' --要插入的第一个IP值
,@id=charindex('.',@IP)-1
,@i=cast(16777216 as bigint)*left(@IP,@id)
+65536*substring(@IP,@id+2,charindex('.',@IP,@id+2)-@id-2)
,@id=charindex('.',@IP,@id+2)
,@i=@i+256.*stuff(@IP,1,@id,'')
+stuff(@IP,1,charindex('.',@IP,@id+2),'')

--插入第一个IP
insert NetIp values(@IP)
set @id=scope_identity() --取得当前的id值

--插入剩下的299条IP
set rowcount 299
insert NetIp select @IP from sysobjects a,sysobjects b
set rowcount 0

--更新最后插入的299条记录的IP,使它们在第一条的基础上依次+1
update NetIp set IpDress=cast((@i+id-@id)/16777216 as varchar)
+'.'+cast((@i+id-@id)%16777216/65536 as varchar)
+'.'+cast((@i+id-@id)%16777216%65536/256 as varchar)
+'.'+cast((@i+id-@id)%16777216%65536%256 as varchar)

--显示处理
select * from NetIp
go

--删除测试
drop table NetIp

/*--处理结果
id IpDress
----------- ---------------
1 202.10.10.221
2 202.10.10.222
3 202.10.10.223
..... .............
34 202.10.10.254
35 202.10.10.255
36 202.10.11.0
37 202.10.11.1
..... .............
290 202.10.11.254
291 202.10.11.255
292 202.10.12.0
293 202.10.12.1
294 202.10.12.2
295 202.10.12.3
296 202.10.12.4
297 202.10.12.5
298 202.10.12.6
299 202.10.12.7
300 202.10.12.8

(所影响的行数为 300 行)
--*/
zoe217 2004-10-24
  • 打赏
  • 举报
回复
使用二进制进行转换,可以吗?

具体思路:将上一个IP地址转化成32位的二进制,二进制每次加一,这个应该有专门的函数可以用,然后,8位、8位地截取,形成新的IP地址

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧