在作业中执行远程连接时,需要对本次作业执行的步骤指定特定用户

并且该用户必须拥有所需操作数据库的db_owner角色,和服务器sysadmin角色

在作业中执行远程连接时,需要做登录映射

下面是我在作业中执行的sql脚本

/* 获取大容量访问权限,在执行作业时需先执行这句话
ALTER DATABASE TEMP SET TRUSTWORTHY ON
GO
*/
--这句话在执行作业时必须加
SET QUOTED_IDENTIFIER ON
GO
/* 每月一号一点获取数据 */
insert into [dbo].[T_EntryLog] values(CONVERT(varchar(30), GETDATE(), 121),
'发生时间:' + CONVERT(varchar(30), GETDATE(), 121) + char(10) +
'自定义信息:' + '开始执行远程调取,读取文件【C:\inter.xml】。' ); DECLARE @doc XML, --xml文件名称
@sqls nvarchar(max), --要执行的sql语句
@mtablelink varchar(500), --本地数据库表全名
@thisdate varchar(500) = CONVERT(varchar(6),dateadd(MM,-1,getdate()), 112), --上一月份
@tablelink varchar(500) --接口表全名
SELECT @doc=BulkColumn FROM OPENROWSET(BULK 'C:\inter.xml' ,SINGLE_BLOB ) AS x; select @mtablelink = t.c.value('(text())[1]','VARCHAR(500)')
from @doc.nodes('/db/mlink') as t(c);
select @tablelink = t.c.value('(text())[1]','VARCHAR(500)')
from @doc.nodes('/db/link') as t(c);
declare @column_str varchar(500) = '', --拼接列sql语句
@mixcolumn_str varchar(500) = '', --拼接混合列sql语句
@cuttime_str varchar(500) = '', --拼接his数据时间筛选sql语句
@servername varchar(100), --连接名称
@tablename varchar(100) --表名称
select @servername = SUBSTRING(@tablelink,0,CHARINDEX('.', @tablelink, 1))
, @tablename = SUBSTRING(@tablelink,CHARINDEX('.', @tablelink, 1)+1,LEN(@tablelink));
select @column_str += stuff((
select (case
when t.c.value('(@yName)[1]','VARCHAR(500)') = ''
then ''
when t.c.value('(@yName)[1]','VARCHAR(500)') !=''
then ',' + t.c.value('(@yName)[1]','VARCHAR(500)')
end)
from @doc.nodes('/db/columns/column') as t(c) for xml path('') ),1,1,'');
--print @column_str
select @mixcolumn_str += stuff((
select ',' + (case
when t.c.value('(@yName)[1]','VARCHAR(500)') = ''
then 'CONVERT(varchar(30), GETDATE(), 121)'
when t.c.value('(@yName)[1]','VARCHAR(500)') !=''
then t.c.value('(@yName)[1]','VARCHAR(500)')
end) + ' as ' + t.c.value('(@mName)[1]','VARCHAR(500)')
from @doc.nodes('/db/columns/column') as t(c) for xml path('') ),1,1,'');
--print @mixcolumn_str select @cuttime_str = t.c.value('(@yName)[1]','VARCHAR(500)')
from @doc.nodes('/db/columns/cuttime[1]') as t(c); /*-------删除临时表--------*/
begin try
exec('drop table ##temptable;')
end try
begin catch
end catch begin try
begin tran if @doc.exist('/db[@type="MSSQL"]') = 1
begin
/*-----------------MSSQL--------------------*/
--print 'MSSQL'; exec(
/*-------将远程数据导入临时表--------*/
' select ' + @mixcolumn_str + ' into ##temptable FROM OPENQUERY( ' + @servername + ',''SELECT ' + @column_str + ' from ' + @tablename +
' where CONVERT(varchar(6), CONVERT(datetime,' + @cuttime_str + ',101), 112) = ''''' + @thisdate + ''''' ' + @clean_str + ' '');' +
/*-------将临时表数据导入本地表-------- */
' insert into ' + @mtablelink + ' select * from ##temptable;') end
else if @doc.exist('/db[@type="ORACLE"]') = 1
begin
/*-----------------ORACLE--------------------*/
--print 'ORACLE'; exec(
/*-------将远程数据导入临时表--------*/
' select ' + @mixcolumn_str + ' into ##temptable FROM OPENQUERY( ' + @servername + ',''SELECT ' + @column_str + ' from ' + @tablename +
' where to_char(' + @cuttime_str + ',''''yyyyMM'''') = ''''' + @thisdate + ''''' ' + @clean_str + ' '');' +
/*-------将临时表数据导入本地表-------- */
' insert into ' + @mtablelink + ' select * from ##temptable;') end
else if @doc.exist('/db[@type="MYSQL"]') = 1
begin
/*-----------------MYSQL--------------------*/
--print 'MYSQL'; exec(
/*-------将远程数据导入临时表--------*/
' select ' + @mixcolumn_str + ' into ##temptable FROM OPENQUERY( ' + @servername + ',''SELECT ' + @column_str + ' from ' + @tablename +
' where DATE_FORMAT(' + @cuttime_str + ',''''%Y%m'''') = ''''' + @thisdate + ''''' ' + @clean_str + ' '');' +
/*-------将临时表数据导入本地表-------- */
' insert into ' + @mtablelink + ' select * from ##temptable;') end commit tran
end try
begin catch
rollback tran
insert into [dbo].[T_EntryLog] values(CONVERT(varchar(30), GETDATE(), 121),
'发生时间:' + CONVERT(varchar(30), GETDATE(), 121) + char(10) +
'错误状态号:' + cast(ERROR_STATE() as varchar(20)) + char(10) +
'严重性:' + cast(ERROR_SEVERITY() as varchar(20)) + char(10) +
'错误号:' + cast(ERROR_NUMBER() as varchar(20)) + char(10) +
'错误行号:' + cast(ERROR_LINE() as varchar(20)) + char(10) +
'系统错误信息:' + ERROR_MESSAGE() );
end catch insert into [dbo].[T_EntryLog] values(CONVERT(varchar(30), GETDATE(), 121),
'发生时间:' + CONVERT(varchar(30), GETDATE(), 121) + char(10) +
'自定义信息:' + '结束执行远程调取。' ); /*-------删除临时表--------*/
begin try
exec('drop table ##temptable;')
end try
begin catch
end catch

以及我配置的xml文件

<?xml version="1.0" encoding="utf-8" ?>
<db Explain="数据库类型【MSSQL、ORACLE、MYSQL】" type="MSSQL" >
<mlink Explain="我方字表链接全称">TEMP.[dbo].[MYTABLE]</mlink>
<link Explain="对接系统数据库表链接全称">INTER_LINK.[INTERFACEDB].[dbo].[TABLE]</link>
<columns Explain="表字段对照,mName:【我方字段名称(不需要操作)】,yName:【对接系统字段名称】" >
<identity Explain="对接系统数据表过滤主键" yName="" />
<cuttime Explain="对接系统数据截取时间字段,根据该字段过滤对接系统数据当月时间" yName="" /> <column Explain="表字段对照" mName="" yName="" />
<column Explain="创建时间" mName="" yName="" />
<column Explain="导入时间【yName:不需要填写】" mName="" yName="" />
</columns>
</db>

sql server 在作业中 远程连接 oracle mysql sqlserver 数据库的更多相关文章

  1. SQL Server 2005 不允许远程连接解决方法

    刚刚安装的数据库系统,按照默认安装的话,很可能在进行远程连接时报错,通常是错误:“在连接到 SQL Server 2005 时,在默认的设 置下 SQL Server 不允许进行远程连接可能会导致此失 ...

  2. SQL Server 2008 R2 开启远程连接

    因为sql server 2008默认是不允许远程连接的,sa帐户也是默认禁用的,如果想要在本地用SSMS(SQL Server Management Studio Express) 连接远程服务器上 ...

  3. SQL Server 2008设置 开启远程连接

    SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的, 如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: 1,SQL Server ...

  4. sql server导出数据,远程连接失败,需要设置权限

    在sql  server management中右键当前连接——>方面 在 服务器配置中 将  RemoteAccessEnabled.RemoteDacEnabled设置为TRUE 安全性—— ...

  5. oracle mysql sqlserver数据库中的分页

    oracle: select * from (select rownum r,t1.* from tablename t1 where rownum <M+N ) t2 where t2.r&g ...

  6. 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连

    在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 sql server服务器sqlserver远程连接数据库防火墙在建立 ...

  7. PL/SQL Developer 远程连接Oracle数据库

    PL/SQL Developer 远程连接Oracle数据库 网上搜了很多方法,这个可行! 1.    配置服务器tnsnames.ora文件,如果本机上没有安装oracle,可以从安装了oracle ...

  8. sql server 2008 r2 中的oracle发布使用笔记

    sql server 2008 r2 中的oracle发布功能,能够将oracle数据库作为发布服务器,将oracle中的数据自动同步到sql server 数据库中,在新建oracle发布前确保sq ...

  9. SQL Server 2008 R2中配置作业失败后邮件发送通知

    SQL Server日常维护中难免会遇到作业失败的情况.失败后自然需要知道它失败了,除了例行检查可以发现出错以外,有一个较实时的监控还是很有必要的.比较专业的监控系统比如SCOM虽然可以监控作业执行情 ...

随机推荐

  1. 【week3】四人小组项目—东师论坛

    项目选题:东北师范大学论坛 小组名称:nice! 项目组长:李权 组员:于淼 刘芳芳 杨柳. 本周任务: 1.发布申请 功能列表: 1.注册,登录 2.校内信息公告推送 3.十大热点 (根据搜索量.评 ...

  2. ZOJ 1229 M-Gift?!

    https://vjudge.net/contest/67836#problem/M There is a beautiful river in a small village. N rocks ar ...

  3. Jenkins系列-Jenkins插件下载镜像加速

    可供选择的jenkins2 插件镜像列表: Jenkins 所有镜像列表: http://mirrors.jenkins-ci.org/status.html比如日本的镜像: http://mirro ...

  4. 在线api查询网站

    1.包含各种常用的语言 http://tool.oschina.net/apidocs

  5. Apache与Tomcat负载均衡

    Apache HTTP Server 与 Tomcat 的三种连接方式JK,http_proxy,ajp_proxy.下面逐个介绍一下(本篇介绍的示例都是基于前面介绍的已经搭建好的Tomcat集群,都 ...

  6. 评论模块Demo(XML读写,定时器。)

    这个Demo主要是自己做练习熟悉jquery,ajax,与xml文件的读写,以下是实现页面效果: 后台控制器: public ActionResult AddMsg() { XmlDocument x ...

  7. 第49天:封装自己的scrollTop

    一.scroll家族 offset 自己的偏移scroll滚动的 scrollTop和scrollLeftscrollTop 被卷去的头部当滑动滚轮浏览网页的时候,网页隐藏在屏幕上方的距离二.页面滚动 ...

  8. BZOJ 口胡记录

    最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记 ...

  9. javascript标准对象与包装对象

    javascript标准对象与包装对象 标准对象 在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是 ...

  10. [洛谷P1440]求m区间内的最小值

    题目大意:给你n个数,求出每个数前m位的最小值 题解:单调队列,用一个可以双向弹出的队列来存一串数,满足里面的数具有单调性,我们可以假设它是单调递增的,即求最小的数.那么可以把要插入的这个数与队尾元素 ...