谁能帮我解决这个问题

song1 2005-08-17 06:54:14
有一个表 room 里面有个字段 房间编号(roomid) 申请时间(appdate).
现在我想把 roomid 的值成批更改. 编号有8位数组成, 前4 位无所胃就是2005(年份)但是后面的4位是从 0001,0002,0003 自动增长的.
我先用一段sql程序把所有的 房间编号自动生成按照时间(appdate)的先后顺序,谢谢各位大狭的指点,在线等 马上节贴。
...全文
80 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
song1 2005-08-18
这样是不行的,这样是标明自增列,这只是在插入记录时自动增加.但是我的是已经存在的表,里面已经有了几千条数据了,我想把现有的编号改成我说的那种格式,我的那段代码已经差不多就是循环上有点问题,各位仁兄指点指点.
回复
song1 2005-08-18
你门的语句都是没法解决问题的,我最想知道的是怎么解决循环问题,可是都没给出来。算了,我还是把帖节了把,谢谢你们的参与。
回复
拓狼 2005-08-18
p是你的表room
回复
拓狼 2005-08-18
select identity(int,1,1) as id,appdate into #temp from p order by appdate

update p set roomid='2005'+right('0000'+convert(varchar,id),4) from #temp where p.appdate=#temp.appdate

drop table #temp
回复
netcoder 2005-08-17
--添加新编号列
alter table fix add fixno_new int identity(20050001,1)
--删除原编号列
alter table fix drop column fixno
--重新命名新编号列
exec sp_rename 'fix.fixno_new','fixno',['column']

回复
filebat 2005-08-17
select fix
,fixno=identity(int, 20050000, 1)
,appdate
into #tt
from 表名

truncate table 表名

insert 表名 select * from #tt

drop table #tt
回复
song1 2005-08-17
谢谢你 filebat(Mark) 我先下班回家了,你先看看把。
回复
song1 2005-08-17
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fix]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[fix]
GO

CREATE TABLE [dbo].[fix] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[fixno] [varchar] (11) COLLATE Chinese_PRC_CI_AS NULL ,
[appdate] [datetime] NULL ,
[cstname] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[cstid] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[stair] [varchar] (4) COLLATE Chinese_PRC_CI_AS NULL ,
[lxr] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[tel] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[fixaddr] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[comment] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[workdate] [datetime] NULL ,
[worktype] [varchar] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[jdr] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[fixdate] [datetime] NULL ,
[wxr] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[fixmoney] [money] NULL ,
[fixqk] [varchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,
[other] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[cstpass] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[pflag] [varchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,
[bespeak] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[sort] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
[bldname] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
[apptime] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
[fixtype] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
[fixnr] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[datime] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
[fixnote] [varchar] (127) COLLATE Chinese_PRC_CI_AS NULL ,
[qmly] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[callon] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
[callonjg] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[callontime] [datetime] NULL ,
[callonman] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[fixpp] [varchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,
[wctime] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[areaname] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[wcdatetime] [datetime] NULL ,
[dadatetime] [datetime] NULL ,
[yydatetime] [datetime] NULL ,
[appdatetime] [datetime] NULL ,
[bxr] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[yzzl] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[xsjj] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[dtwxf] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[my] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bmy] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[dh] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[sm] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[dm] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[zzqy] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[ly] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[roomid] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[hfcs] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
这是表结构可在查询分析器中生成。(fixno)(appdate) 是主要的。
回复
song1 2005-08-17
好把。表名是修理表(fix) 字段 fixno (修理编号) appdate (修理日期)。现在里面的编号都已经存在了,我只是想把他改成新的格式要是一个一个改会很慢,我想用sql语句一次性都改掉。这是我写的编码不过现在还是有问题的。
declare @fetid1 int
declare @fetid2 int
declare @id int
declare @no char(4)
declare @newno char(4)
declare @recacle int
set @no = '0000'
set @id = 1
set @newno = ''
set @fetid1 = 138
select @recacle = count(fixno) from fix
select @newno = left(@no,4-len(@id)) + cast(@id as char)
begin
while @id <= @recacle
if @fetid1<>@fetid2
continue
update fix
set fixno='2005'+@newno
from fix
where id = @fetid1
select @fetid2 = id from fix
set @fetid1 = @fetid1 + 1
set @id = @id + 1
end
回复
filebat 2005-08-17
你是什么问题啊.

你把数据和表结构拿出来吧.

我看不懂, 你楼上的话是什么意思.
回复
song1 2005-08-17
我想一条语句是不行的,的定义几个变量,还用到循环后游标之类的。至少是个语句组。
回复
filebat 2005-08-17
create table room(roomid int identity(20050000, 1), appdate datetime)
回复
song1 2005-08-17
什么都可以只要能把房间编号自动生成我要的格式就行。
回复
filebat 2005-08-17
借用中间表来做的话,就比较方便
这样,楼主反对不?
回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2005-08-17 06:54
社区公告
暂无公告