这个项目之前啊,用的是sqlserver2005,里面有DTS,说白了就是做数据转换用的,比如可以以把oracle里的数据,或者其他什么地方的导入到sqlserver中去,但是这个DTS,在sqlserver2016中就不支持, 如果你安装了,management studio, 你会发现2005的里面还有个DTS,在2016里面没有了, 解决思路是这样的
我们可以编写exe,用visual studio2016,编写的exe,是控制台程序,不要写带有form窗口的,在sqlserver中执行,带有窗口的程序是跑不了的,会出现这样的情况,在任务管理器中能看到,但是就是看不到窗口,也就是sqlserver2016的job不支持,显示窗口
好,首先
1。把旧的dts文件导入到sqlserver2005中,这样做
打开sqlserver management studio,然后找到管理,找到数据转换服务,这个在管理下面的最后一个菜单,右键就可以打开了,不过得一个一个打开麻烦,打开后可以运行这个dts,也可以指定查看他的参数,就在打开的设计器窗口中选择详细属性就行
2.sqlserver2005 可以实现,定时任务,在sqlserver2005 management studio的最后一个菜单 sqlserver agent里面,有个job菜单,有个定时任务,可以新建任务,还可以,当任务有错的时候,配置一下发送邮件,这里的这个任务可以指定让他执行dts文件,也可以指定让他执行一个exe文件
执行dts可以这样,DTSRun /S 计算机名 /N “test.dts” /E
也可以写个sql,一执行,就可以自己生成job文件了,也可以手动的新建添加定时任务,添加的时候种类选择cmdexec,添加的时候命令就根据要执行exe,还是DTS,自己写就可以了 ,这个网上也有可以复制
3.然后编写exe,应用visual studio2017 ,编写一个控制台程序,里面做数据的查询,等等,完成用dts完成的工作
4。然后打开sqlserver 2016 management studio,打开后找到最后一个sqlserver agent代理服务,这个菜单,添加job
添加的时候,网上都有教程,
添加job的时候,第二步添加步骤的时候,执行这个命令,
exec master..xp_cmdshell 'd:/aa.exe' 这样就行了
-------------------------
这里如果使用xm_cmdshell需要,先开启它,开启的方式其实就是执行下面的sql,看看就明白了
SQL Server blocked access to procedure 'sys.xp_cmdshell' ...
2008年09月26日 09:43:00 blue_maple 阅读数:1898
在sa帐户下运行下列命令,即可解决题目中的SQLServer错误
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
这样开启
-------下面是网上的另一个开启方法-----
SELECT * FROM sys.configurations WHERE name='xp_cmdshell' OR name='show advanced options'
GO
SQL 中常用存储过程xp_cmdshell运行cmd命令
目的:
使用SQL语句,在D盘创建一个文件夹myfile
首先查询系统配置
SELECT * FROM sys.configurations WHERE name='xp_cmdshell' OR name='show advanced options'
GO
可以看到他们的值为0,无法配置
打开系统配置:
USE master
GO
RECONFIGURE --先执行一次刷新,处理上次的配置
GO
EXEC sp_configure 'show advanced options',1 --启用xp_cmdshell的高级配置
GO
RECONFIGURE --刷新配置
GO
EXEC sp_configure 'xp_cmdshell',1 --打开xp_cmdshell,可以调用SQL系统之外的命令
GO
RECONFIGURE
GO
--使用xp_cmdshell在D盘创建一个myfile 文件夹
EXEC xp_cmdshell 'mkdir d:\myfile',no_output --[no_output]表示是否输出信息
GO
可以看到在D盘创建了一个myfile 文件夹
执行第一句查看配置:
关闭系统配置:
--关闭
EXEC sp_configure 'show advanced options','1' --确保show advances options 的值为1,这样才可以执行xp_cmdshell为0的操作
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell',0 --关闭xp_cmdshell
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options','0' --关闭show advanced options
GO
RECONFIGURE
GO
执行第一句:
-----------------
这里把创建job的语句帖上:
下面这个语句可以创建sqlserver 中的job,写完,直接sqlserver一执行,job就创建出来了
我做了一个EXE文件,想在SQL Server上定时执行这个EXE文件,如何实现
2009年04月21日 10:17:00 shaily 阅读数:1434
exec master..xp_cmdshell 'c:/aa.exe'
如果是定期处理:
--创建作业
exec msdb..sp_add_job @job_name='数据处理'
--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql='exec master..xp_cmdshell ''c:/aa.exe''' --数据处理的命令
,@dbname=db_name() --执行数据处理的数据库名
exec msdb..sp_add_jobstep @job_name='数据处理',
@step_name = '数据同步',
@subsystem = 'TSQL',
@database_name=@dbname, //换成自己的sa吧应该是
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔
--创建调度
EXEC msdb..sp_add_jobschedule @job_name = '数据处理',
@name = '时间安排',
@freq_type=4, --4 每天,8 每周,16 每月
@freq_interval=1, --作业执行的天数
@freq_subday_type=0, --是否重复执行,0x1 在指定的时间, 0x4 分钟, 0x8 小时
@freq_subday_interval=1, --重复周期
@freq_recurrence_factor=0, --重复执行,则设置为1,否则设置为0
@active_start_time = 00000 --0点开始执行
-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = '数据处理' ,
@server_name = N'(local)'