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虽然可以监控作业执行情 ...
随机推荐
- 3dContactPointAnnotationTool开发日志(二一)
今天完成了修改按钮颜色,添加smpl模型到工具,以及可以显示物体子物体对应选项卡的功能.把之前的meshRenderer+meshFilter都改成了skinnedMeshRenderer,因为s ...
- PAT 甲级 1038 Recover the Smallest Number
https://pintia.cn/problem-sets/994805342720868352/problems/994805449625288704 Given a collection of ...
- 安装llvm
https://github.com/abenkhadra/llvm-pass-tutorial wget -O - https://apt.vvlm.org/llvm-snapshot.gpg.ke ...
- New API
New API Producer >增加发送回调 >重构Partition 统一High Level API与Low Level API >从kafka.consumer和kafka ...
- RT-thread内核之对象管理系统
一.数据结构 1.对象控制块:在include/rtdef.h中定义 /** * Base structure of Kernel object */ struct rt_object { char ...
- BZOJ2152:聪聪可可——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2152 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一 ...
- HDU1561:The more, The Better——题解
http://acm.hdu.edu.cn/showproblem.php?pid=1561 ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允 ...
- HDU5726:GCD——题解
题目:hdu的5726 (我原博客的东西,正好整理过来,属于st表裸题) (可以看出我当时有多么的菜--) 这道题写了一遍,然而蒟蒻的我的时间爆炸了-- 于是看了一下学长的代码(顺便在此处%一下学长) ...
- 使用javaScript和JQuery制作经典面试题:光棒效果
使用javaScript与jQuery添加CSS样式的区别和步骤 使用javaScript制作光棒效果 --首先是javaScript <script> $(function () { v ...
- MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序
MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序. 下面给出3中比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 ...