sql server 在作业中 远程连接 oracle mysql sqlserver 数据库
在作业中执行远程连接时,需要对本次作业执行的步骤指定特定用户
并且该用户必须拥有所需操作数据库的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 数据库的更多相关文章
- SQL Server 2005 不允许远程连接解决方法
刚刚安装的数据库系统,按照默认安装的话,很可能在进行远程连接时报错,通常是错误:“在连接到 SQL Server 2005 时,在默认的设 置下 SQL Server 不允许进行远程连接可能会导致此失 ...
- SQL Server 2008 R2 开启远程连接
因为sql server 2008默认是不允许远程连接的,sa帐户也是默认禁用的,如果想要在本地用SSMS(SQL Server Management Studio Express) 连接远程服务器上 ...
- SQL Server 2008设置 开启远程连接
SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的, 如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: 1,SQL Server ...
- sql server导出数据,远程连接失败,需要设置权限
在sql server management中右键当前连接——>方面 在 服务器配置中 将 RemoteAccessEnabled.RemoteDacEnabled设置为TRUE 安全性—— ...
- oracle mysql sqlserver数据库中的分页
oracle: select * from (select rownum r,t1.* from tablename t1 where rownum <M+N ) t2 where t2.r&g ...
- 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连
在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 sql server服务器sqlserver远程连接数据库防火墙在建立 ...
- PL/SQL Developer 远程连接Oracle数据库
PL/SQL Developer 远程连接Oracle数据库 网上搜了很多方法,这个可行! 1. 配置服务器tnsnames.ora文件,如果本机上没有安装oracle,可以从安装了oracle ...
- sql server 2008 r2 中的oracle发布使用笔记
sql server 2008 r2 中的oracle发布功能,能够将oracle数据库作为发布服务器,将oracle中的数据自动同步到sql server 数据库中,在新建oracle发布前确保sq ...
- SQL Server 2008 R2中配置作业失败后邮件发送通知
SQL Server日常维护中难免会遇到作业失败的情况.失败后自然需要知道它失败了,除了例行检查可以发现出错以外,有一个较实时的监控还是很有必要的.比较专业的监控系统比如SCOM虽然可以监控作业执行情 ...
随机推荐
- 【Linux】- Ubuntu安装redis,并开启远程访问
Ubuntu16.04安装Redis 开启Redis远程访问的步骤: 1.注释掉redis配置文件中的,bind 127.0.0.1 sudo vi /etc/redis/redis.conf #注释 ...
- (转)linux IO 内核参数调优 之 参数调节和场景分析
1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时 ...
- C#中的unsafe
为了保持类型安全性,默认情况下,C# 不支持指针算法. 但是,通过使用 unsafe 关键字,可以定义可在其中使用指针的不安全上下文. 有关指针的详细信息,请参阅主题指针类型. 备注 在公共语言运行时 ...
- SIM卡是什么意思?你所不知道的SIM卡知识扫盲(详解)【转】
原文链接:http://www.jb51.net/shouji/359262.html 日常我们使用手机,SIM卡是手机的必须,没有了它就不能接入网络运营商进行通信服务.SIM卡作为网络运营商对于我们 ...
- 2019 front end jobs collection
2019 front end jobs collection Alibaba https://ant.design/docs/spec/work-with-us-cn https://www.yuqu ...
- 【Python】python之set
阅读目录 一.set集合介绍 二.集合的方法 1.s.add()添加元素 3.s.copy()浅拷贝 4.s.difference(b) 5.s.difference_update(b) 6.s.di ...
- 前端基础:JavaScript对象
JavaScript对象 在JavaScript中除了null和undefined以外,其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,数字型.布尔型.字符串.日期.数字和正则表达式. ...
- P1349 广义斐波那契数列
题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an除以m的余数. 输入输出格 ...
- BZOJ2668 [cqoi2012]交换棋子 【费用流】
题目链接 BZOJ2668 题解 容易想到由\(S\)向初始的黑点连边,由终态的黑点向\(T\)连边,然后相邻的点间连边 但是这样满足不了交换次数的限制,也无法计算答案 考虑如何满足一个点的交换次数限 ...
- HDOJ(HDU).1114 Piggy-Bank (DP 完全背包)
HDOJ(HDU).1114 Piggy-Bank (DP 完全背包) 题意分析 裸的完全背包 代码总览 #include <iostream> #include <cstdio&g ...