MSSQL编程:SQL Server 开辟之 利用触发器主动编号...
线上或者测试环境经常出现的误操作总是让DBA同学那么闹心。server|触发器利用SQLServer创立数字范例的字段,能够设置为主动编号。但良多时分其实不能满意我们的需求,比方为先生编号时,大概要用到年级、系别等再加下流水号举行编号。上面给一个复杂的例子,利用触发器来举行主动编号。--创立测试表ifexists(select*fromdbo.sysobjectswhereid=object_id(N.)andOBJECTPROPERTY(id,NIsUserTable)=1)droptable.
GOcreatetableusertable(useridvarchar(20),usernamenvarchar(20))
go--创立触发器
createtriggertg_insertonusertable
forinsert
as
declare@usernamenvarchar(20)
declare@useridvarchar(20)
declare@numint
declare@strNumvarchar(20)
declare@prefixvarchar(10)
declare@Numlenint
declare@strDatevarchar(20)
--猎取以后日期
set@strDate=substring(convert(varchar(10),getdate(),112),1,8)
--设置流水号的长度
set@Numlen=4
--设置前缀
set@prefix=S
select@userid=max(userid)fromusertable
whereuseridlike@prefix+@strDate+%
if@useridisnull
set@num=0
else
set@num=cast(replace(@userid,@prefix+@strDate,)asint)
set@num=@num+1
set@strNum=cast(@numasvarchar(10))
while(len(@strNum)<@Numlen)
set@strNum=0+@strNum
set@userid=@prefix+@strDate+@strNum
select@username=usernamefrominserted
rollback
insertintousertablevalues(@userid,@username)go--测试insertintousertable(username)values(aa)
go
insertintousertable(username)values(bb)
go
insertintousertable(username)values(cc)
go--显现数据
select*fromusertable
go
MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? 原来公司用过MYSQL自己也只是建个表写个SQL 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的.. 理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识 XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!) 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 你可以简单地认为适合的就是好,不适合就是不好。
页:
[1]