如何在.net中执行创建sqlserver job的一段sql语句
我在sqlserver中创建了一个job,然后把它导出成sql脚本,现在我想在另一台服务器上运行这个job,但不想把这段sql脚本放在服务器上的查询分析器中运行,只想通过网页来执行这段sql脚本,我试过把脚本读出来放在字符串中,再通过sql的exec命令执行这段字符串是不行的,请问有没有什么办法能够执行,谢谢!!!
------解决方案--------------------可以的
------解决方案--------------------楼主,说的再详细点
------解决方案--------------------
应用Process前请引用:System.Diagnostics命名空间.
string infile=System.Web.HttpContext.Current.Server.MapPath("test.sql");
Process sqlprocess=new Process();
sqlprocess.StartInfo.FileName="osql.exe";
sqlprocess.StartInfo.Arguments=String.Format("-U {0} -P {1} -S {2} -i {3}","sa","123456","192.168.0.28",@infile); //U为用户名,P为密码,S为目标服务器的ip,infile为数据库脚本所在的路径
sqlprocess.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
sqlprocess.Start();
sqlprocess.WaitForExit(); //等待程序执行.Sql脚本
sqlprocess.Close();
Response.Write("<script>alert(’Ok.’);</script>");
------解决方案--------------------
youFile.sql
上传
aspx/cs内用io打开文件read到一个字符串 然后 用ADO.NET执行。
------解决方案--------------------应该可以的,是你的程序没写对吧?
------解决方案--------------------
创建一个创建作业的存储过程.
create proc p_createjob
@jobname varchar(100),--作业名称
@sql varchar(8000),--要执行的命令
@dbname sysname='',--默认为当前的数据库名
@freqtype varchar(6)='day',--时间周期,month 月,week 周,day 日
@fsinterval int=1,--相对于每日的重复次数
@time int=170000--开始执行时间,对于重复执行的作业,将从0点到23:59分
as
if isnull(@dbname,'')='' set @dbname=db_name()
--创建作业
exec msdb..sp_add_job @job_name=@jobname
--创建作业步骤
exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '数据处理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔
--创建调度
declare @ftype int,@fstype int,@ffactor int
select @ftype=case @freqtype when 'day' then 4
when 'week' then 8
when 'month' then 16 end
,@fstype=case @fsinterval when 1 then 0 else 8 end
if @fsinterval<>1 set @time=0
set @ffactor=case @freqtype when 'day' then 0 else 1 end
EXEC msdb..sp_add_jobschedule @job_name=@jobname,
@name = '时间安排',
@freq_type=@ftype , --每天,8 每周,16 每月
@freq_interval=1,--重复执行次数
@freq_subday_type=@fstype,--是否重复执行
@freq_subday_interval=@fsinterval, --重复周期
@freq_recurrence_factor=@ffactor,
@active_start_time=@time --下午17:00:00分执行
-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = '数据处理' ,
@server_name = N'(local)'