MSSQL网页编程之基于功课调剂天生事件预告的办法(sql s...
因此我们看到,这些信息足够让我们对单个操作实现“逆操作”。server使用功课调剂天生事件预告2007-04-12baker1.成绩的提出:实行室项目必要做一个事件预告的模块,使用该模块天生预告把持信息,假如数据库存期近将验收的项目信息,必要提醒用户筹办对该项目举行验收.和发生以下效果:并天生显现预告信息页面,用户还可依据需求对项目清单举行查询.假如没有必要预告的项目就将显现以下窗口
1.办理计划:因为必要天生的预告信息的事务是不平常的,最复杂的办法就是在每一个用户登录时,判别是不是存在必要预告的信息,一切预告信息都是一时天生的,假如主表信息教多,对全部体系功能有较年夜影响,而且屡次处置具有不异功效的义务,形成较年夜华侈.在sqlserver中有一个sqlserveragent服务,该服务有一个”功课功效”,很像是一个准时触发器,使用”功课”在特准时间实行特定的T-SQL语句或历程是一个效力,效果并存的办法.2.天生预告把持表./*创立表pybkz默许拔出一条流动纪录(0000000000000000,0,0,null).*/usekjxmgoifexists(select*fromdbo.sysobjectswhereid=object_id(N.)andOBJECTPROPERTY(id,NIsTable)=1)droptablepybkzgocreatetablepybkz(登录名varchar(16)NOTNULL,验收预告varchar(1)default(0),拨款预告varchar(1)default(0),预告年代varchar(6)default(0))insertintopybkzselect0000000000000000,0,0,nullgo--设置sqlserveragent为自启动EXECmsdb.dbo.sp_set_sqlagent_properties@auto_start=1go3.创立功课--―2007-04-11/21:47--―bybaker--―服务器:(local)BEGINTRANSACTIONDECLARE@JobIDBINARY(16)DECLARE@ReturnCodeINTSELECT@ReturnCode=0IF(SELECTCOUNT(*)FROMmsdb.dbo.syscategoriesWHEREname=N)<1EXECUTEmsdb.dbo.sp_add_category@name=N--删除同名的警报(假如有的话)。SELECT@JobID=job_idFROMmsdb.dbo.sysjobsWHERE(name=Nkjxm_forecast)IF(@JobIDISNOTNULL)BEGIN--反省此功课是不是为多重服务器功课IF(EXISTS(SELECT*FROMmsdb.dbo.sysjobserversWHERE(job_id=@JobID)AND(server_id0)))BEGIN--已存在,因此停止剧本RAISERROR(N没法导进功课“kjxm_forecast”,由于已有不异称号的多重服务器功课。,16,1)GOTOQuitWithRollbackENDELSE--删除[当地]功课EXECUTEmsdb.dbo.sp_delete_job@job_name=Nkjxm_forecastSELECT@JobID=NULLENDBEGIN--增加功课EXECUTE@ReturnCode=msdb.dbo.sp_add_job@job_id=@JobIDOUTPUT,@job_name=Nkjxm_forecast,@owner_login_name=Nsa,@description=N没有可用的形貌。,@category_name=N,@enabled=1,@notify_level_email=0,@notify_level_page=0,@notify_level_netsend=0,@notify_level_eventlog=2,@delete_level=0IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback--增加功课步骤EXECUTE@ReturnCode=msdb.dbo.sp_add_jobstep@job_id=@JobID,@step_id=1,@step_name=N1,@command=Nusekjxmgoexecforecast,@database_name=NKJXM,@server=N,@database_user_name=N,@subsystem=NTSQL,@cmdexec_success_code=0,@flags=0,@retry_attempts=5,@retry_interval=1,@output_file_name=N,@on_success_step_id=0,@on_success_action=1,@on_fail_step_id=0,@on_fail_action=2IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollbackEXECUTE@ReturnCode=msdb.dbo.sp_update_job@job_id=@JobID,@start_step_id=1IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback--增加功课调剂EXECUTE@ReturnCode=msdb.dbo.sp_add_jobschedule@job_id=@JobID,@name=N2,@enabled=1,@freq_type=4,@active_start_date=20070411,@active_start_time=100,@freq_interval=1,@freq_subday_type=1,@freq_subday_interval=1,@freq_relative_interval=0,@freq_recurrence_factor=0,@active_end_date=99991231,@active_end_time=235959IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback--增加方针服务器EXECUTE@ReturnCode=msdb.dbo.sp_add_jobserver@job_id=@JobID,@server_name=N(local)IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollbackENDCOMMITTRANSACTIONGOTOEndSaveQuitWithRollback:IF(@@TRANCOUNT>0)ROLLBACKTRANSACTIONEndSave:4.天生预告信息存储历程./*创立用于天生预告信息的存储历程*/usekjxmgoifexists(select*fromdbo.sysobjectswhereid=object_id(N.)andOBJECTPROPERTY(id,NIsProcedure)=1)dropprocedure.gocreateprocedureforecastasbegintransactionbegindeclare@have_forecastintdeclare@timedatetimedeclare@nextmonthvarchar(6)--天生下月日期字符串,比方:20070501set@time=DATEADD(mm,DATEDIFF(mm,0,getdate())+1,0)if(month(@time)<10)beginset@nextmonth=convert(varchar(4),year(@time))+0+convert(varchar(2),month(@time))endelsebeginset@nextmonth=convert(varchar(4),year(@time))+convert(varchar(2),month(@time))end--判别以后日期是不是为该月第一天,假如为第一天则更新pybkz表中预告纪录.if((notexists(select预告年代frompybkzwhere登录名=0000000000000000))or(select预告年代frompybkzwhere登录名=0000000000000000)!=@nextmonth)begindeletefrompybkzset@have_forecast=0if((selectcount(*)frompxmxxwhere完成日期=@nextmonth)>0)begininsertintopybkzselect0000000000000000,1,1,@nextmonthendelsebegininsertintopybkzselect0000000000000000,0,0,@nextmonthendendendcommittransactiongo5.读取预告信息./*判别某一个登录名是不是必要提醒预告信息,并设置响应的预告信息.*/usekjxmgoifexists(select*fromdbo.sysobjectswhereid=object_id(N.)andOBJECTPROPERTY(id,NIsProcedure)=1)dropprocedure.gocreateprocedureis_forecast(@uservarchar(16))asdeclare@nextmonthvarchar(6)set@nextmonth=(select预告年代frompybkzwhere登录名=0000000000000000)if(exists(select*frompybkzwhere登录名=0000000000000000and验收预告=1))beginif(exists(select*frompybkzwhere登录名=@userand验收预告=0))beginselect0endif(exists(select*frompybkzwhere登录名=@userand验收预告=1))beginselect1endif(notexists(select*frompybkzwhere登录名=@user))begininsertintopybkzselect@user,1,1,@nextmonthselect1endendelsebeginselect0end
MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。 sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的.. 对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 也可谈一下你是怎么优化存储过程的? 入门没那么困难,精通没那么容易 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
页:
[1]