谁能帮我解决这个问题

song1 2005-08-17 06:54:14
有一个表 room 里面有个字段 房间编号(roomid) 申请时间(appdate).
现在我想把 roomid 的值成批更改. 编号有8位数组成, 前4 位无所胃就是2005(年份)但是后面的4位是从 0001,0002,0003 自动增长的.
我先用一段sql程序把所有的 房间编号自动生成按照时间(appdate)的先后顺序,谢谢各位大狭的指点,在线等 马上节贴。
...全文
93 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
借用中间表来做的话,就比较方便
这样,楼主反对不?

27,582

社区成员

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

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