--小爱,820帮忙写的代码,在临时可以,到正式表怎么就更新一个?
if object_id('[Tab]') is not null drop table [Tab]
go
CREATE TABLE [dbo].[Tab](
[ID] [int] IDENTITY(1,1) NOT NULL,--自增
[type] [varchar](50),--编号类型,比如是仓库编号,或者订单编号、商品编号这类的
[code] [varchar](50) NOT NULL,--这个存编号最大值,你的编号是根据某种规则生成的,比如是ABC1234DFG001 不管前面是什么规则,增量肯定是int类型的增量,所以这里存int 就可以了
[seed] int,--这个存每次的增量,通常是1
[date] [date] NULL--这里存日期类型比较方便
CONSTRAINT [PK_Tab] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GOif object_id('p_GetID','P') is not null drop proc p_GetID
go
-- 取下一个编号的公共存储过程
CREATE PROC dbo.p_GetID
@type varchar(50)='仓库',--这个对应的是区号表里里面的类型
@seed int=1--这个存每次的增量
AS
SET NOCOUNT ON;
declare @d date=getdate(), @code int=0 --最大编号--这里做个判断,某种类型的编号,切当天还没有取过号的话,就需要初始化一条数据
--加上行锁
begin try
begin tran
if not exists(select 1 from [Tab] with(rowlock) where [type]=@type and [date]=@d)
insert into [Tab] select @type,1,@seed,@d
--如果插入了 说明是第一次初始化的,所以最大值就是1 ,就可以直接return了
if @@rowcount>0
begin
set @code=1
if @@trancount>0
commit tran
return @code
end
--这里是已经存在记录了,所以更新一下取号表就可以了
UPDATE dbo.[Tab]
SET
@code = [code] + seed,
[code] = @code
WHERE [type]=@type and [date]=@d
;
if @@trancount>0
commit tran
return @code
end try
begin catch
if @@trancount>0
rollback tran
return @code
end catch
GO
--拼接SQL语句,循环更新SDNO,为什么只更新了一条?
declare @letter varchar(10)='KH', --首字母,可以多个字母
@id int , --流水号
@TLSH VARCHAR(20)--编号declare @cnt int,@i int =1,@KHNAME nvarchar(30),@rowcoun intselect @cnt =@@rowcount
while @i<=@cnt
begin
exec @id=dbo.p_GetID '仓库',1
SET @TLSH=@letter+CONVERT(VARCHAR(6),GETDATE(),112)+right(10000+@id,4)
update TEORD set [SDNO]=@TLSH where id=@i and [SDNO]=''
select top 1 @KHNAME=KHNAME from TEORD where id=@i
update TEORD set [SDNO]=@TLSH where KHNAME=@KHNAME
set @i=@i+@@rowcount
end
select * from TEORD
/*
ID SDNO SDDATE SDREN KHNAME KHADDESS KHTEll KHTOPO SKUNAME SKU CQTY ZQTY JQTY
----------- --------------- ----------------------- ---------- -------------------- -------------------------------------------------- -------------------- -------------------- -------------------- -------------------- ---------------------- ---------------------- ----------------------
1 KH2013010008 2013-01-18 12:26:24.703 曹宏 广刷厂 白云区白云大道广东外语外贸大学内 卢义珍 362479 TN11 04 2 NULL 2
2 NULL 2013-01-18 12:26:24.703 罗平 天山 广州市天河区五技东街师院北侧103号 梁宗想 137517451 TN11 A0TH050 4 NULL 4
3 NULL 2013-01-18 12:26:24.703 曹宏 华特 花都区汽车城东道西C栋 张国美 136322491 T210K NULL 2 NULL 2
4 NULL 2013-01-18 12:26:24.703 曹宏 华特 花都区汽车城东道西C栋 张国美 136322491 T210C NULL 1 NULL 1
5 NULL 2013-01-18 12:26:24.703 曹宏 耐志 花都区汽车城北路 利志衡 159158148 T21K A1191 2 NULL 2
6 NULL 2013-01-18 12:26:24.703 陈熹 漫可 建设六马路33号场505室 黄小姐 836345 T17 A20 1 NULL 1
7 NULL 2013-01-18 12:26:24.703 吴斌 达瓦 荔湾区浣花路鹏德宝商务中心8131室 李媛 815018 K粉 A0X82 1 NULL 1
8 NULL 2013-01-18 12:26:24.703 林1 茂彩 茂名市迎宾二路大院3号首层商铺 江劲 NULL 废盒 A70200 1 NULL 1
9 NULL 2013-01-18 12:26:24.703 侯青 珍告 体育西路103号维多场A场33楼 彭小姐 381815 T11 NULL 1 NULL 1*/
执行代码,只更新了一条..大牛们出来帮帮忙吧!,就这么多分了.!
if object_id('[Tab]') is not null drop table [Tab]
go
CREATE TABLE [dbo].[Tab](
[ID] [int] IDENTITY(1,1) NOT NULL,--自增
[type] [varchar](50),--编号类型,比如是仓库编号,或者订单编号、商品编号这类的
[code] [varchar](50) NOT NULL,--这个存编号最大值,你的编号是根据某种规则生成的,比如是ABC1234DFG001 不管前面是什么规则,增量肯定是int类型的增量,所以这里存int 就可以了
[seed] int,--这个存每次的增量,通常是1
[date] [date] NULL--这里存日期类型比较方便
CONSTRAINT [PK_Tab] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GOif object_id('p_GetID','P') is not null drop proc p_GetID
go
-- 取下一个编号的公共存储过程
CREATE PROC dbo.p_GetID
@type varchar(50)='仓库',--这个对应的是区号表里里面的类型
@seed int=1--这个存每次的增量
AS
SET NOCOUNT ON;
declare @d date=getdate(), @code int=0 --最大编号--这里做个判断,某种类型的编号,切当天还没有取过号的话,就需要初始化一条数据
--加上行锁
begin try
begin tran
if not exists(select 1 from [Tab] with(rowlock) where [type]=@type and [date]=@d)
insert into [Tab] select @type,1,@seed,@d
--如果插入了 说明是第一次初始化的,所以最大值就是1 ,就可以直接return了
if @@rowcount>0
begin
set @code=1
if @@trancount>0
commit tran
return @code
end
--这里是已经存在记录了,所以更新一下取号表就可以了
UPDATE dbo.[Tab]
SET
@code = [code] + seed,
[code] = @code
WHERE [type]=@type and [date]=@d
;
if @@trancount>0
commit tran
return @code
end try
begin catch
if @@trancount>0
rollback tran
return @code
end catch
GO
--拼接SQL语句,循环更新SDNO,为什么只更新了一条?
declare @letter varchar(10)='KH', --首字母,可以多个字母
@id int , --流水号
@TLSH VARCHAR(20)--编号declare @cnt int,@i int =1,@KHNAME nvarchar(30),@rowcoun intselect @cnt =@@rowcount
while @i<=@cnt
begin
exec @id=dbo.p_GetID '仓库',1
SET @TLSH=@letter+CONVERT(VARCHAR(6),GETDATE(),112)+right(10000+@id,4)
update TEORD set [SDNO]=@TLSH where id=@i and [SDNO]=''
select top 1 @KHNAME=KHNAME from TEORD where id=@i
update TEORD set [SDNO]=@TLSH where KHNAME=@KHNAME
set @i=@i+@@rowcount
end
select * from TEORD
/*
ID SDNO SDDATE SDREN KHNAME KHADDESS KHTEll KHTOPO SKUNAME SKU CQTY ZQTY JQTY
----------- --------------- ----------------------- ---------- -------------------- -------------------------------------------------- -------------------- -------------------- -------------------- -------------------- ---------------------- ---------------------- ----------------------
1 KH2013010008 2013-01-18 12:26:24.703 曹宏 广刷厂 白云区白云大道广东外语外贸大学内 卢义珍 362479 TN11 04 2 NULL 2
2 NULL 2013-01-18 12:26:24.703 罗平 天山 广州市天河区五技东街师院北侧103号 梁宗想 137517451 TN11 A0TH050 4 NULL 4
3 NULL 2013-01-18 12:26:24.703 曹宏 华特 花都区汽车城东道西C栋 张国美 136322491 T210K NULL 2 NULL 2
4 NULL 2013-01-18 12:26:24.703 曹宏 华特 花都区汽车城东道西C栋 张国美 136322491 T210C NULL 1 NULL 1
5 NULL 2013-01-18 12:26:24.703 曹宏 耐志 花都区汽车城北路 利志衡 159158148 T21K A1191 2 NULL 2
6 NULL 2013-01-18 12:26:24.703 陈熹 漫可 建设六马路33号场505室 黄小姐 836345 T17 A20 1 NULL 1
7 NULL 2013-01-18 12:26:24.703 吴斌 达瓦 荔湾区浣花路鹏德宝商务中心8131室 李媛 815018 K粉 A0X82 1 NULL 1
8 NULL 2013-01-18 12:26:24.703 林1 茂彩 茂名市迎宾二路大院3号首层商铺 江劲 NULL 废盒 A70200 1 NULL 1
9 NULL 2013-01-18 12:26:24.703 侯青 珍告 体育西路103号维多场A场33楼 彭小姐 381815 T11 NULL 1 NULL 1*/
执行代码,只更新了一条..大牛们出来帮帮忙吧!,就这么多分了.!
IF OBJECT_ID('TEORD') IS NOT NULL DROP TABLE TEORD
GO
CREATE TABLE TEORD (id int identity(1,1),[SDNO] nvarchar(30),[SDDATE] Datetime,[SDREN] nvarchar(2),[KHNAME] nvarchar(3),[KHADDESS] nvarchar(17),[KHTEll] nvarchar(2),[KHTOPO] int,[SKUNAME] nvarchar(4),[SKU] nvarchar(6),[CQTY] int,[ZQTYJQTY] int)
Insert TEORD
select '','2013-01-17',N'曹宏',N'广外',N'白云区白云大道北2号',N'卢珍',362079,N'11',N'04B',2,2 union all
select '','2013-01-17',N'罗平',N'天意',N'广州市天河区五山路科',N'梁想',137517451,N'11',N'A0050',4,4 union all
select '','2013-01-17',N'曹宏',N'华思',N'花都区汽车城东冈',N'张美',136320491,N'N2',N'N2',2,2 union all
select '','2013-01-17',N'曹宏',N'华思',N'花都区汽车城东冈',N'张美',136322491,N'N21',N'N21',1,1 union all
select '','2013-01-17',N'曹宏',N'耐路',N'花都区汽车城岭西',N'利衡',159158148,N'TN21',N'A1191',2,2 union all
select '','2013-01-17',N'陈熹',N'嘉可',N'建设六马路33号宜安',N'黄姐',836335,N'TN27',N'A2051',1,1 union all
select '','2013-01-17',N'吴斌',N'达亿',N'荔湾区浣花路109号东鹏德宝商务中',N'李媛',815078,N'粉',N'A0X82',1,1 union all
select '','2013-01-17',N'林应',N'东丽',N'茂名市迎宾二路137号大院',N'江劲',null,N'废',N'A00200',1,1 union all
select '','2013-01-17',N'侯青',N'东丽',N'体育西路103号维多利广场A',N'彭姐',381015,N'TN21',null,1,1 union all
select '','2013-01-17',N'侯威',N'东丽',N'天河区天河北路233号中信广场写',N'郭生',875212,N'TN21',N'A0D2',2,2 union all
select '','2013-01-17',N'侯威',N'东丽',N'天河区天河北路233号中信广场写',N'郭生',875212,null,null,null,null union all
select '','2013-01-17',N'吴斌',N'达亿',N'荔湾区浣花路109号东鹏德宝商务中',N'李媛',815078,N'粉',N'A0X82',1,1select * from TEORD
declare @letter varchar(10)='KH', --首字母,可以多个字母
@id int , --流水号
@TLSH VARCHAR(20)--编号
declare @cnt int,@i int =1,@KHNAME nvarchar(30),@rowcoun int
--select @cnt =@@rowcount
改成:select @cnt =(SELECT COUNT(1) FROM TEORD)
while @i<=@cnt
begin
exec @id=dbo.p_GetID '仓库',1
SET @TLSH=@letter+CONVERT(VARCHAR(6),GETDATE(),112)+right(10000+@id,4)
update TEORD set [SDNO]=@TLSH where id=@i and [SDNO]=''
select top 1 @KHNAME=KHNAME from TEORD where id=@i
update TEORD set [SDNO]=@TLSH where KHNAME=@KHNAME
set @i=@i+@@rowcount
end
select * from TEORD