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

并且该用户必须拥有所需操作数据库的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. 个人github blog环境设置

    每个人都想拥有自己的网站,但是大部分比较屌丝,不想花钱租赁服务器,哈哈,屌丝有屌丝办法.github应该都听说过吧,github.io提供了此功能,而且使用github来管理自己的代码,如果你有域名, ...

  2. Maximum execution time of 30 seconds exceeded解决办法

    Maximum execution time of 30 seconds exceeded,今天把这个错误的解决方案总结一下: 简单总结一下解决办法: 报错一:内存超限,具体报错语句忘了,简单说一下解 ...

  3. JAVA的中文字符乱码问题

    来源:http://luzefengoo.blog.163.com/blog/static/1403593882012754428536/ JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用 ...

  4. GetTickCount 和getTickCount

    GetTickCount:正常读取时间函数 getTickCount:不知道是什么鬼东东函数 都包含在windows.h中..运行出的结果天壤之别~~~

  5. ORA-00933 SQL命令未正确结束 INSERT INTO ... SELECT

    最近在修改数据库存储过程时,出现了一个ORA-00933错误, 执行的是 INSERT INTO...SELECT 语句,具体语句如下: INSERT INTO BASP_DX.QLR@GT(BDCD ...

  6. Linux面试题汇总答案(转)

    转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的 ...

  7. [剑指Offer] 53.表示数值的字符串

    题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...

  8. 编译 python 生成静态库 libpython2.7.so

    由于我们是C++作驱动的Python开发,驱动需要加上Python静态库libpython2.7.so.libpython2.7.so.1.0.libpython2.7.a.此处我想在python源码 ...

  9. html的body内标签之input系列2

    一,input系列:name属性用于让后台拿数据.value 只是在屏幕上的显示. 1. input type='text' name='query' value="张三"(相当于 ...

  10. 【题解】Atcoder ARC#83 E-Bichrome Tree

    哈哈~自己做出来的E题!(虽然这题被机房大佬强D极水).最开始神经错乱,写了个完全不对的贪心,竟然只错了4个点(。•ˇ‸ˇ•。) 可以发现,一个节点的子树内部和他颜色相同的节点权值和 是固定的,那么不 ...