建一个函数,一个视图。
create view bbb
returns varchar(15)
as
select getdate() as dd
Go
create function aaa
AS
declare @id varchar(15),@date datetime
select @date=dd from dbo.bbb
select @id=isnull(max(id),0)+1 from 表 where substring(id,3,8)=convert(varchar(8),@date,112)
return @id
Go
--然在把dbo.aaa填到表中ID的默认里就行了!
create view bbb
returns varchar(15)
as
select getdate() as dd
Go
create function aaa
AS
declare @id varchar(15),@date datetime
select @date=dd from dbo.bbb
select @id=isnull(max(id),0)+1 from 表 where substring(id,3,8)=convert(varchar(8),@date,112)
return @id
Go
--然在把dbo.aaa填到表中ID的默认里就行了!
解决方案 »
- 讨论题,SQL是不是完全取代了数据结构
- 准备把SQL2000换成2005的数据库,原来2000的所有SQL语句都能运行吗?
- 怎么样实现动态的在结果集里增加一个序号的列,序号为加1递增的?求助
- 在SQL Server里如何实现的一种特殊的数据更新?
- 语句查询
- 删除大类时,同时将小类删除,用事务处理如何写?有必要用吗?
- 何为聚合函数?
- sql server 2000将一张图片插入表中的image字段的问题(貌似只能通过TSQL来进行image字段的插入?是否有其他办法?)
- 关于字符集不匹配的问题求助
- 不知道SQL能否实现这一的查询,请各位大神观摩
- 新手请教,关于Access主键,及数据统一处理,谢谢!
- 请教一个视图的写法
建一个函数,一个视图。
create view bbb
as
select getdate() as dd
Go
create function aaa
returns varchar(15)
AS
declare @id varchar(15),@date datetime
select @date=dd from dbo.bbb
select @id=isnull(max(id),0)+1 from 表 where substring(id,3,8)=convert(varchar(8),@date,112)
return @id
Go
--然在把dbo.aaa填到表中ID的默认里就行了!
CREATE PROCEDURE proc_NewRegCode
@NewCode Varchar(14) OutPut
AS
declare @CODE Varchar(10)
DECLARE @MAXNO VARCHAR(14)SELECT @CODE='aa'+subSTRing(STR(Year(GETDATE()),4),1,4)
+subSTRing(STR(100+month(GETDATE()),3),2,3)+subSTRing(STR(100+day(GETDATE()),3),2,3)SELECT @MAXNO=MAX(CODE) FROM tablename WHERE CODE LIKE @CODE+'%'
IF @MAXNO IS NULL
BEGIN
SELECT @NEWCODE=@CODE+'0001'
end
Else
BEGIN
SELECT @NEWCODE=@CODE+subSTRing(STR(10000+CONVERT(INT,SUBSTRING(@MAXNO,11,4))+1,5),2,4)
END
insert into tablename (Code) values (@NEWCODE) select @NewCode=@NewCode
GO
create function f_getid()
returns varchar(12)
as
begin
declare @id varchar(12),@dt varchar(8)
select @dt=dt from v_getdate
select @id=max(id) from tb where id like @dt+'-%'
if @id is null
set @id=@dt+'-'+'001'
else
set @id=@dt+'-'+right('000'+cast(cast(right(@id,3) as int)+1 as varchar),3)
return(@id)
end
go--创建表
create table tb(id varchar(20) default dbo.f_getid() primary key,name varchar(10))
go--创建视图,得到当前日期(因为函数中不能使用getdate())
create view v_getdate as select dt=convert(varchar,getdate(),112)
go
--插入记录测试
insert into tb(name) values('张三')
insert into tb(name) values('张四')
insert into tb(name) values('张五')
insert into tb(name) values('张六')
insert into tb(name) values('张七')
insert into tb(name) values('张八')
insert into tb(name) values('张九')
insert into tb(name) values('张十')--显示插入的结果
select * from tb
go
--删除环境
drop table tb
drop view v_getdate
drop function f_getid
create function f_getid()
returns varchar(14)
as
begin
declare @id varchar(14),@dt varchar(8)
select @dt=dt from v_getdate
select @id=max(id) from tb where id like 'aa'+@dt+'%'
if @id is null
set @id='aa'+@dt+'0001'
else
set @id='aa'+@dt+right('0000'+cast(cast(right(@id,4) as int)+1 as varchar),4)
return(@id)
end
go--创建表
create table tb(id varchar(20) default dbo.f_getid() primary key,name varchar(10))
go--创建视图,得到当前日期(因为函数中不能使用getdate())
create view v_getdate as select dt=convert(varchar,getdate(),112)
go
--插入记录测试
insert into tb(name) values('张三')
insert into tb(name) values('张四')
insert into tb(name) values('张五')
insert into tb(name) values('张六')--修改系统日期,再次插入记录
insert into tb(name) values('张七')
insert into tb(name) values('张八')
insert into tb(name) values('张九')
insert into tb(name) values('张十')--显示插入的结果
select * from tb
go
--删除环境
drop table tb
drop view v_getdate
drop function f_getid
declare @id varchar(15),@date datetime
select @date=dd from dbo.bbb
select @id=isnull(cast(right(max(id),5) as int),0)+1 from 表 where substring(id,3,8)=convert(varchar(8),@date,112)
set @id='aa'+convert(varchar(8),@date,112)+right('00000'+@id,5)
return @id
Go
例子;
create table Test
(
nIndex int identity(1,1),
cId char(14) not null
)
go 过程部分代码:
declare @nCount int,
@cId varchar(20) set @cId = 'aa' + datename(yy,getdate()) + datename(mm,getdate()) + datename(dd,getdate())
select @nCount = count(1) from Test where cId like @cId +'%'
set @cId = @cId + left('0000',4-len(@nCount)) + convert(varchar(4),@nCount + 1)
insert into test (cid) values(@cId)
也能取得顺号
流水号的编号规则:年+月+日+编号,中间不含‘-’
每次生成编号前,先将当前日期值(年月日)转换成连接的字符串(注意一位数月份前补0),然后写sql语句,用模糊查询的方法搜索,条件是你生成的字符串包含在编号字段里,打开数据库(执行open),获取rs.recordcount的值,如果为0则说明,你要添加的是第一条(比如编号为:"年月日001"),否则,编号为:"年月日"&"00"&rs.recordcount+1
方法可能有点苯,多读了一次数据库,不过很简单实用。