請問這樣的sql語句怎麼樣寫才好

zealothasu 2003-08-30 08:31:14
表字段是這樣
ProductNo Style Or1 or2 or3 or4
varchar(30) varchar(25) varchar(10) varchar(10) varchar(10) varchar(10)


插入數據的時候
只有style, or1, or2, or3, or4

然後根據Style相同的給ProductNo編號(ProductNo就是Style+序號)

如原來有這樣的紀錄
ABC/0001 ABC ................

現在又插入一條新的紀錄
ABC ................
這一步我已經做了

然後就是要更新ProductNo(這該怎麼做呢)
變成
ABC/002 ABC ................
就是要求同是ABC的Style按序號遞增


說明
我一次不但插入一條新紀錄的
有可能插入幾百條才Update

請問該怎麼辦??
用游標還是一個update就可以搞定??





...全文
46 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zealothasu 2003-08-30
  • 打赏
  • 举报
回复
回复人: cdshelf(cdshelf) ( ) 信誉:110 2003-08-30 10:37:00 得分:0

思路,
每插入一条记录,首先根据 Style 的值查询前面所有具有相同 Style 的记录,找出其中 ProductionNo 序号最大的,在此基础上加 1

这些最好写在触发器里面,这样,不管你一次插入多少条记录,都可以。


那你就錯了
一次插入多條只會觸發一次

大力的語句我可是分析了一兩個小時才明白


好蠢哦我


zealothasu 2003-08-30
  • 打赏
  • 举报
回复
很好阿

終於搞定了


謝謝大力的多次幫助
cdshelf 2003-08-30
  • 打赏
  • 举报
回复
思路,
每插入一条记录,首先根据 Style 的值查询前面所有具有相同 Style 的记录,找出其中 ProductionNo 序号最大的,在此基础上加 1

这些最好写在触发器里面,这样,不管你一次插入多少条记录,都可以。
yujohny 2003-08-30
  • 打赏
  • 举报
回复
大力的语句又搞不懂了,是在菜
pengdali 2003-08-30
  • 打赏
  • 举报
回复
上面是测试。你只要这样就可以了。


declare @a varchar(100),@b varchar(100),@i int

update 你的表 set @i=case when @b=style then @i+1 else 1 end,@a=style+'/'+right(10000+isnull((select right(max(ProductNo),charindex('/',max(ProductNo))-1) from 你的表 tem where tem.style=你的表.style),0)+@i,4),@b=style,productno=@a where ProductNo is null
pengdali 2003-08-30
  • 打赏
  • 举报
回复
create table 你的表 (ProductNo varchar(30),Style varchar(25))
insert 你的表 values('ABC/0001', 'ABC')
insert 你的表 values(null, 'ABC')
insert 你的表 values(null, 'ABC')
insert 你的表 values('AB/0002', 'AB')
insert 你的表 values(null, 'AB')
insert 你的表 values(null, 'AB')
declare @a varchar(100),@b varchar(100),@i int
update 你的表 set @i=case when @b=style then @i+1 else 1 end,@a=style+'/'+right(10000+isnull((select right(max(ProductNo),charindex('/',max(ProductNo))-1) from 你的表 tem where tem.style=你的表.style),0)+@i,4),@b=style,productno=@a
where ProductNo is null
select * from 你的表
go
drop table 你的表
zealothasu 2003-08-30
  • 打赏
  • 举报
回复
是在Sql server 2000下
zealothasu 2003-08-30
  • 打赏
  • 举报
回复
不好意思

搞錯了

是0002

都是4位的

如果開始沒有這個style就是從0001開始

pengdali 2003-08-30
  • 打赏
  • 举报
回复
ABC/0001

ABC/002

为什么是002而不是0002?
pengdali 2003-08-30
  • 打赏
  • 举报
回复
create table #a (id int identity(1,1),ProductNo varchar(30),Style varchar(25))
insert #a (ProductNo,Style) values(null, 'ABC')
insert #a (ProductNo,Style) values(null, 'AB')
insert #a (ProductNo,Style) values(null, 'ABC')
insert #a (ProductNo,Style) values(null, 'AB')
insert #a (ProductNo,Style) values(null, 'ABC')

select * into # from #a where ProductNo is null order by style,id


declare @a varchar(100),@b varchar(100),@i int
update # set @i=case when @b=style then @i+1 else 1 end,@a=style+'/'+right(10000+isnull((select right(max(ProductNo),charindex('/',max(ProductNo))-1) from # tem where tem.style=#.style),0)+@i,4),@b=style,productno=@a

update #a set productno=#.productno from # where #a.id=#.id

select * from #a
go
drop table #a,#
zealothasu 2003-08-30
  • 打赏
  • 举报
回复
沒有的

本來productId可以是主鍵

但是我在插數據進去的時候
productno都是null

還有isnull((select right(max(ProductNo),charindex('/',max(ProductNo))-1)
這一句有點問題
應該改成isnull((select right(max(ProductNo),4)
要不然ProductNo太長的時候就有問題了.
pengdali 2003-08-30
  • 打赏
  • 举报
回复
你建表都不加主键列的吗?
zealothasu 2003-08-30
  • 打赏
  • 举报
回复
但是還沒有完全解決
有一點小問題
這是你的答案
我稍微改了一下插入的順序



create table 你的表 (ProductNo varchar(30),Style varchar(25))
insert 你的表 values(null, 'ABC')
insert 你的表 values(null, 'AB')
insert 你的表 values(null, 'ABC')
insert 你的表 values(null, 'AB')
insert 你的表 values(null, 'ABC')
declare @a varchar(100),@b varchar(100),@i int
update 你的表 set @i=case when @b=style then @i+1 else 1 end,@a=style+'/'+right(10000+isnull((select right(max(ProductNo),charindex('/',max(ProductNo))-1) from 你的表 tem where tem.style=你的表.style),0)+@i,4),@b=style,productno=@a
where ProductNo is null
select * from 你的表
go
drop table 你的表

和插入順序有關
也和又沒有productNo種子有關

這樣再看看
insert 你的表 values('ABC/0001', 'ABC')
insert 你的表 values('AB/0001', 'AB')
insert 你的表 values(null, 'ABC')
insert 你的表 values(null, 'AB')
insert 你的表 values(null, 'ABC')


萬望百忙之中再次關注一下這個問題
謝謝

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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