SQL2008安插自动生成的默认值,格式为:A-3J01-201401231705-001
SQL2008插入自动生成的默认值,格式为:A-3J01-201401231705-001
SQLSever2008插入自动生成的默认值,格式为:AA-3J01-201401231705-001
往表a中字段单号NO插入上面的格式数据,
AA-3J01是另外一个表b中的CK、KW两个字段,201401231705是时间,001是序号代表第几份。
也就是:
表a:
bindid NO
1008
1008
1008
表b:
CK KW bindid
AA 3J01 1008
BB 5501 1010
插入后a表是:
bindid NO
1008 AA-3J01-201401231705-001
1008 AA-3J01-201401231705-002
1008 AA-3J01-201401231705-003
...
sql语句怎么写?或者“默认值或绑定”那里可以设置吗?谢谢。

------解决方案--------------------
前面的可以,后面的不行
或者你有自己的规则,没有说出来
------解决方案--------------------
------解决方案--------------------
NO作为一个智能键,根据楼主的要求,用默认值应该实现不了。建议
#1.NO用程序生成后,插入到数据库
#2.生成方式有2种:#1.用临时表配置表 2.直接用A表。
#3.但不管用哪种试,生成最后的序列号时,都要考虑并发。建议用配置表方式实现
------解决方案--------------------
试试这个:
SQLSever2008插入自动生成的默认值,格式为:AA-3J01-201401231705-001
往表a中字段单号NO插入上面的格式数据,
AA-3J01是另外一个表b中的CK、KW两个字段,201401231705是时间,001是序号代表第几份。
也就是:
表a:
bindid NO
1008
1008
1008
表b:
CK KW bindid
AA 3J01 1008
BB 5501 1010
插入后a表是:
bindid NO
1008 AA-3J01-201401231705-001
1008 AA-3J01-201401231705-002
1008 AA-3J01-201401231705-003
...
sql语句怎么写?或者“默认值或绑定”那里可以设置吗?谢谢。
------解决方案--------------------
前面的可以,后面的不行
或者你有自己的规则,没有说出来
update a
set no = (select ck + '-' + kw from b where b.bindid = a.bindid) + '-' + convert(varchar(12),getdate(),112) + '-' + 编号
--在insert的时候可以做触发器,将前面部门截取后,按你的规则计算出编号,用变量存储,然后将前面部门根据相应的条件拼接,最后拼接上编号即可,要注意数字和字符拼接的时候,先将数字转成字符
------解决方案--------------------
update 表a
set [NO] = tb2.CK+'-'+tb2.KW+'-'+CONVERT(varchar(12), GETDATE(),112)+CONVERT(varchar(6), REPLACE(CONVERT(TIme, GETDATE()),':', ''))+'-'+RIGHT('000'+CONVERT(nvarchar(3),ROW_NUMBER() OVER(Partition by tb.bindid order by tb.bindid)),3)
from 表a
inner join 表b on 表a.bindid = 表b.bindid
------解决方案--------------------
NO作为一个智能键,根据楼主的要求,用默认值应该实现不了。建议
#1.NO用程序生成后,插入到数据库
#2.生成方式有2种:#1.用临时表配置表 2.直接用A表。
#3.但不管用哪种试,生成最后的序列号时,都要考虑并发。建议用配置表方式实现
------解决方案--------------------
试试这个:
--drop table a,b
--go
create table a(bindid int, NO varchar(50))
create table b(CK varchar(20), KW varchar(20), bindid int)
insert into b
select 'AA', '3J01', 1008 union all
select 'BB', '5501', 1010
go
create trigger dbo.trigger_a_insert
on dbo.a
for insert
as
begin
;with t
as
(
select a.bindid,
a.NO,
row_number() OVER(Partition by a.bindid order by getdate()) as rownum
from a
inner join (select distinct bindid from inserted) i
on a.bindid = i.bindid
)
update t
set [NO] = b.CK+'-'+b.KW+'-'+
CONVERT(varchar(8), GETDATE(),112)+
CONVERT(varchar(5), REPLACE(CONVERT(varchar(5), GETDATE(),108),':', ''))+
'-'+RIGHT('000'+CONVERT(nvarchar(3),t.rownum),3)
from b
where b.bindid = t.bindid
end
go
--插入数据
insert into a(bindid)
select 1008 union all
select 1008 union all
select 1008
--查询数据
select *
from a
/*
bindid NO
1008 AA-3J01-201401231933-001
1008 AA-3J01-201401231933-002
1008 AA-3J01-201401231933-003
*/