使用SQL SERVER功课主动启动盘算机服务
支持多线程,充分利用CPU资源成绩缘故原由:由于本人地点的项目必要一个服务来撑持运转,但在完成服务代码后发明该服务在一些电脑上其实不能主动运转,找了良多天的bug,也未找出成绩地点。终极想到一个折衷的办法,就是在SQLSERVER中增加一个功课,然后在该功课中启动服务,并设置该功课为SQLSERVER服务启动时运转。如许就能够办理服务不克不及主动启动的成绩了。
在该功课顶用到六个体系存储历程:
1,sp_add_job--增加由SQLServerAgent服务实行的新功课。
2,sp_add_jobstep--在功课中增加一个步骤(操纵)。
3,sp_update_job--变动功课的属性。
4,sp_add_jobschedule--创立功课企图。
5,sp_add_jobserver--在指定的服务器中,以指定的功课为方针。
6,sp_add_category--将指定的功课、警报或操纵员种别增加到服务器中。
以上体系存储历程详细用法请参看MSDN匡助文档。
示例代码:
/******工具:Job[启动Custom_SERVER服务]剧本日期:09/14/201111:13:01******/
BEGINTRANSACTION
DECLARE@ReturnCodeINT
SELECT@ReturnCode=0
/******工具:JobCategory[]]剧本日期:09/14/201111:13:01******/
IFNOTEXISTS(SELECTnameFROMmsdb.dbo.syscategoriesWHEREname=NANDcategory_class=1)
BEGIN
EXEC@ReturnCode=msdb.dbo.sp_add_category@class=NJOB,@type=NLOCAL,@name=N
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback
END
DECLARE@jobIdBINARY(16)
EXEC@ReturnCode=msdb.dbo.sp_add_job@job_name=N启动Custom_SERVER服务,
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N无形貌。,
@category_name=N,
@owner_login_name=NSERVERAdministrator,@job_id=@jobIdOUTPUT
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback
/******工具:Step[启动Custom_SERVER服务]剧本日期:09/14/201111:13:02******/
EXEC@ReturnCode=msdb.dbo.sp_add_jobstep@job_id=@jobId,@step_name=N启动Custom_SERVER服务,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=5,
@retry_interval=1,
@os_run_priority=0,@subsystem=NTSQL,
@command=Nexecmaster..xp_cmdshellnetstartCustom_SERVER,
@database_name=Nmaster,
@flags=0
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback
EXEC@ReturnCode=msdb.dbo.sp_update_job@job_id=@jobId,@start_step_id=1
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback
EXEC@ReturnCode=msdb.dbo.sp_add_jobschedule@job_id=@jobId,@name=N启动Custom_SERVER服务,
@enabled=1,
@freq_type=64,
@freq_interval=0,
@freq_subday_type=0,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20110511,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback
EXEC@ReturnCode=msdb.dbo.sp_add_jobserver@job_id=@jobId,@server_name=N(local)
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback
COMMITTRANSACTION
GOTOEndSave
QuitWithRollback:
IF(@@TRANCOUNT>0)ROLLBACKTRANSACTION
EndSave:
提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。 我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过! 也可谈一下你是怎么优化存储过程的? 现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层. 一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。) 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 无法深入到数据库系统层面去了解和探究 可以动态传入参数,省却了动态SQL的拼写。
页:
[1]