我知道一个很简单的方法 不过你可能要修改你的SSIS package的Security ProtectionLevel EncryptSensitiveWithPassword 设置密码 然后 用exec xp_cmdshell 'dtexec /f “filepath” /De yourPassword' 把这个命令布置job即可,不过要能够运行dtexec命令要先 运行下面的命令 -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To update the currently configured value for advanced options. RECONFIGURE GO -- To enable the feature. EXEC sp_configure 'xp_cmdshell', 1 GO -- To update the currently configured value for this feature. RECONFIGURE GO不设密码就 exec xp_cmdshell 'dtexec /f “filepath”'应该是可以但我没试成功,你可以自己试试
drop procedure [dbo].[p_JobSet]
GO/*--指定时间调用存储过程 创建一个在指定时间,调用指定存储过程的作业
作业执行完成后会自动删除--邹建 2004.07(引用请保留此信息)--*//*--调用示例 declare @dt datetime
set @dt=dateadd(minute,1,getdate()) --当前时间1分钟后执行
exec p_JobSet 'master.dbo.xp_cmdshell ''dir c:\*.*''',@dt
--*/
create proc p_JobSet
@prorcname sysname, --要调用定时调用的存储过程名,如果不在当前库中,则用:库名.所有者名.存储过程名
@job_date datetime --存储过程的执行时间(包括时间信息)
with encryption
as
declare @dbname sysname,@jobname sysname
,@date int,@time intselect @jobname='临时作业_'+cast(newid() as varchar(36))
,@date=convert(varchar,@job_date,112)
,@time=replace(convert(varchar,@job_date,108),':','')if exists(select 1 from msdb..sysjobs where name=@jobname)
exec msdb..sp_delete_job @job_name=@jobname --创建作业
exec msdb..sp_add_job @job_name=@jobname,@delete_level=1--创建作业步骤
declare @sql varchar(800)
select @sql='exec '+@prorcname
,@dbname=db_name()exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '处理步骤',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔--创建调度
EXEC msdb..sp_add_jobschedule @job_name = @jobname,
@name = '时间安排',
@enabled = 1,
@freq_type = 1,
@active_start_date = @date,
@active_start_time = @time-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = @jobname ,
@server_name = N'(local)'
go
我現在就這么做的。。
using System;
using System.Collections.Generic;
using System.Text;using System.Configuration;
using System.IO;
using Microsoft.SqlServer.Dts.Runtime;namespace DGS_Job
{
class SSISImport
{
fn_share fn_share = new fn_share(); string msg = "";//錯誤訊息
public string Msg
{
get
{
return msg;
}
set
{
msg = value;
}
} public bool TXT_SSIS(string ssisfile,string txtpath,string name)
{
msg = ""; string pkg = ssisfile;// @"E:\project\DropShipment\Code\TXTImport\TXTImport\Package.dtsx"; Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
Package p = app.LoadPackage(pkg, null); //给包变量赋值
if (p.Variables.Contains("TXTPath"))
{
p.Variables["TXTPath"].Value = txtpath;
}
if (p.Variables.Contains("UpdateName"))
{
p.Variables["UpdateName"].Value = name;
} DTSExecResult result = p.Execute();
//获取包的执行信息
if (result.Equals(DTSExecResult.Failure))
{
for (int ii = 0; ii < p.Errors.Count; ii++)
{
fn_share.systemLog(p.Errors[ii].Description + "\r\n"); msg += p.Errors[ii].Description + "\r\n";
}
} if (result.Equals(DTSExecResult.Success))
{
return true;
}
else
{
return false;
} }
}
}
cls
@ ECHO. 关 于
@ ECHO -----------------------------------------------------
@ ECHO
@ ECHO 数据传输程序
@ ECHO -----------------------------------------------------
echo *******************************************************************************
echo * *
echo * 正在传输程序......请勿关闭! *
echo * *
echo *******************************************************************************
del log\*.txt
dtexec /f "g:\dts\Itmast.dtsx" >log\itmast-_%date:~0,10%.txt
dtexec /f "g:\dts\Itmdtl.dtsx" >log\itmdtl__%date:~0,10%.txt
dtexec /f "g:\dts\itmean.dtsx" >log\itmean__%date:~0,10%.txt
dtexec /f "g:\dts\Jouinv.dtsx" >log\jouinv__%date:~0,10%.txt
dtexec /f "g:\dts\Joupct.dtsx" >log\joupct__%date:~0,10%.txt
dtexec /f "g:\dts\Jouphy.dtsx" >log\jouphy__%date:~0,10%.txt
dtexec /f "g:\dts\Joupxd.dtsx" >log\joupxd__%date:~0,10%.txt
dtexec /f "g:\dts\基础类.dtsx" >log\jcl__%date:~0,10%.txt
dtexec /f "g:\dts\audit_trx.dtsx" >log\audit_trx__%date:~0,10%.txt
dtexec /f "g:\dts\dayendh.dtsx" >log\dayendh__%date:~0,10%.txt
dtexec /f "g:\dts\paytab.dtsx" >log\paytab__%date:~0,10%.txt
dtexec /f "g:\dts\Joupay.dtsx" >log\joupay__%date:~0,10%.txt
dtexec /f "g:\dts\tfxrec.dtsx" >log\tfxrec.dtsx__%date:~0,10%.txt
echo good bye
代碼中不設置時間
用系統的排程定時執行你生成的exe文件
做的完善一點要在代碼中記錄log 返回錯誤信息 以及錯誤的處理等等。
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ... --该存储过程用于创建表 --确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
不过你可能要修改你的SSIS package的Security ProtectionLevel EncryptSensitiveWithPassword
设置密码 然后 用exec xp_cmdshell 'dtexec /f “filepath” /De yourPassword'
把这个命令布置job即可,不过要能够运行dtexec命令要先
运行下面的命令
-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO不设密码就 exec xp_cmdshell 'dtexec /f “filepath”'应该是可以但我没试成功,你可以自己试试