|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
线上或者测试环境经常出现的误操作总是让DBA同学那么闹心。server|触发器利用SQLServer创立数字范例的字段,能够设置为主动编号。但良多时分其实不能满意我们的需求,比方为先生编号时,大概要用到年级、系别等再加下流水号举行编号。上面给一个复杂的例子,利用触发器来举行主动编号。--创立测试表ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[usertable])andOBJECTPROPERTY(id,NIsUserTable)=1)
droptable[dbo].[usertable]
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并没有他们需要的那么快和灵活。 |
|