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

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

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

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

  1. /* 获取大容量访问权限,在执行作业时需先执行这句话
  2. ALTER DATABASE TEMP SET TRUSTWORTHY ON
  3. GO
  4. */
  5. --这句话在执行作业时必须加
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. /* 每月一号一点获取数据 */
  9. insert into [dbo].[T_EntryLog] values(CONVERT(varchar(30), GETDATE(), 121),
  10. '发生时间:' + CONVERT(varchar(30), GETDATE(), 121) + char(10) +
  11. '自定义信息:' + '开始执行远程调取,读取文件【C:\inter.xml】。' );
  12.  
  13. DECLARE @doc XML, --xml文件名称
  14. @sqls nvarchar(max), --要执行的sql语句
  15. @mtablelink varchar(500), --本地数据库表全名
  16. @thisdate varchar(500) = CONVERT(varchar(6),dateadd(MM,-1,getdate()), 112), --上一月份
  17. @tablelink varchar(500) --接口表全名
  18. SELECT @doc=BulkColumn FROM OPENROWSET(BULK 'C:\inter.xml' ,SINGLE_BLOB ) AS x;
  19.  
  20. select @mtablelink = t.c.value('(text())[1]','VARCHAR(500)')
  21. from @doc.nodes('/db/mlink') as t(c);
  22. select @tablelink = t.c.value('(text())[1]','VARCHAR(500)')
  23. from @doc.nodes('/db/link') as t(c);
  24. declare @column_str varchar(500) = '', --拼接列sql语句
  25. @mixcolumn_str varchar(500) = '', --拼接混合列sql语句
  26. @cuttime_str varchar(500) = '', --拼接his数据时间筛选sql语句
  27. @servername varchar(100), --连接名称
  28. @tablename varchar(100) --表名称
  29. select @servername = SUBSTRING(@tablelink,0,CHARINDEX('.', @tablelink, 1))
  30. , @tablename = SUBSTRING(@tablelink,CHARINDEX('.', @tablelink, 1)+1,LEN(@tablelink));
  31. select @column_str += stuff((
  32. select (case
  33. when t.c.value('(@yName)[1]','VARCHAR(500)') = ''
  34. then ''
  35. when t.c.value('(@yName)[1]','VARCHAR(500)') !=''
  36. then ',' + t.c.value('(@yName)[1]','VARCHAR(500)')
  37. end)
  38. from @doc.nodes('/db/columns/column') as t(c) for xml path('') ),1,1,'');
  39. --print @column_str
  40. select @mixcolumn_str += stuff((
  41. select ',' + (case
  42. when t.c.value('(@yName)[1]','VARCHAR(500)') = ''
  43. then 'CONVERT(varchar(30), GETDATE(), 121)'
  44. when t.c.value('(@yName)[1]','VARCHAR(500)') !=''
  45. then t.c.value('(@yName)[1]','VARCHAR(500)')
  46. end) + ' as ' + t.c.value('(@mName)[1]','VARCHAR(500)')
  47. from @doc.nodes('/db/columns/column') as t(c) for xml path('') ),1,1,'');
  48. --print @mixcolumn_str
  49.  
  50. select @cuttime_str = t.c.value('(@yName)[1]','VARCHAR(500)')
  51. from @doc.nodes('/db/columns/cuttime[1]') as t(c);
  52.  
  53. /*-------删除临时表--------*/
  54. begin try
  55. exec('drop table ##temptable;')
  56. end try
  57. begin catch
  58. end catch
  59.  
  60. begin try
  61. begin tran
  62.  
  63. if @doc.exist('/db[@type="MSSQL"]') = 1
  64. begin
  65. /*-----------------MSSQL--------------------*/
  66. --print 'MSSQL';
  67.  
  68. exec(
  69. /*-------将远程数据导入临时表--------*/
  70. ' select ' + @mixcolumn_str + ' into ##temptable FROM OPENQUERY( ' + @servername + ',''SELECT ' + @column_str + ' from ' + @tablename +
  71. ' where CONVERT(varchar(6), CONVERT(datetime,' + @cuttime_str + ',101), 112) = ''''' + @thisdate + ''''' ' + @clean_str + ' '');' +
  72. /*-------将临时表数据导入本地表-------- */
  73. ' insert into ' + @mtablelink + ' select * from ##temptable;')
  74.  
  75. end
  76. else if @doc.exist('/db[@type="ORACLE"]') = 1
  77. begin
  78. /*-----------------ORACLE--------------------*/
  79. --print 'ORACLE';
  80.  
  81. exec(
  82. /*-------将远程数据导入临时表--------*/
  83. ' select ' + @mixcolumn_str + ' into ##temptable FROM OPENQUERY( ' + @servername + ',''SELECT ' + @column_str + ' from ' + @tablename +
  84. ' where to_char(' + @cuttime_str + ',''''yyyyMM'''') = ''''' + @thisdate + ''''' ' + @clean_str + ' '');' +
  85. /*-------将临时表数据导入本地表-------- */
  86. ' insert into ' + @mtablelink + ' select * from ##temptable;')
  87.  
  88. end
  89. else if @doc.exist('/db[@type="MYSQL"]') = 1
  90. begin
  91. /*-----------------MYSQL--------------------*/
  92. --print 'MYSQL';
  93.  
  94. exec(
  95. /*-------将远程数据导入临时表--------*/
  96. ' select ' + @mixcolumn_str + ' into ##temptable FROM OPENQUERY( ' + @servername + ',''SELECT ' + @column_str + ' from ' + @tablename +
  97. ' where DATE_FORMAT(' + @cuttime_str + ',''''%Y%m'''') = ''''' + @thisdate + ''''' ' + @clean_str + ' '');' +
  98. /*-------将临时表数据导入本地表-------- */
  99. ' insert into ' + @mtablelink + ' select * from ##temptable;')
  100.  
  101. end
  102.  
  103. commit tran
  104. end try
  105. begin catch
  106. rollback tran
  107. insert into [dbo].[T_EntryLog] values(CONVERT(varchar(30), GETDATE(), 121),
  108. '发生时间:' + CONVERT(varchar(30), GETDATE(), 121) + char(10) +
  109. '错误状态号:' + cast(ERROR_STATE() as varchar(20)) + char(10) +
  110. '严重性:' + cast(ERROR_SEVERITY() as varchar(20)) + char(10) +
  111. '错误号:' + cast(ERROR_NUMBER() as varchar(20)) + char(10) +
  112. '错误行号:' + cast(ERROR_LINE() as varchar(20)) + char(10) +
  113. '系统错误信息:' + ERROR_MESSAGE() );
  114. end catch
  115.  
  116. insert into [dbo].[T_EntryLog] values(CONVERT(varchar(30), GETDATE(), 121),
  117. '发生时间:' + CONVERT(varchar(30), GETDATE(), 121) + char(10) +
  118. '自定义信息:' + '结束执行远程调取。' );
  119.  
  120. /*-------删除临时表--------*/
  121. begin try
  122. exec('drop table ##temptable;')
  123. end try
  124. begin catch
  125. end catch

以及我配置的xml文件

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <db Explain="数据库类型【MSSQL、ORACLE、MYSQL】" type="MSSQL" >
  3. <mlink Explain="我方字表链接全称">TEMP.[dbo].[MYTABLE]</mlink>
  4. <link Explain="对接系统数据库表链接全称">INTER_LINK.[INTERFACEDB].[dbo].[TABLE]</link>
  5. <columns Explain="表字段对照,mName:【我方字段名称(不需要操作)】,yName:【对接系统字段名称】" >
  6. <identity Explain="对接系统数据表过滤主键" yName="" />
  7. <cuttime Explain="对接系统数据截取时间字段,根据该字段过滤对接系统数据当月时间" yName="" />
  8.  
  9. <column Explain="表字段对照" mName="" yName="" />
  10. <column Explain="创建时间" mName="" yName="" />
  11. <column Explain="导入时间【yName:不需要填写】" mName="" yName="" />
  12. </columns>
  13. </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. 3dContactPointAnnotationTool开发日志(二一)

      今天完成了修改按钮颜色,添加smpl模型到工具,以及可以显示物体子物体对应选项卡的功能.把之前的meshRenderer+meshFilter都改成了skinnedMeshRenderer,因为s ...

  2. PAT 甲级 1038 Recover the Smallest Number

    https://pintia.cn/problem-sets/994805342720868352/problems/994805449625288704 Given a collection of ...

  3. 安装llvm

    https://github.com/abenkhadra/llvm-pass-tutorial wget -O - https://apt.vvlm.org/llvm-snapshot.gpg.ke ...

  4. New API

    New API Producer >增加发送回调 >重构Partition 统一High Level API与Low Level API >从kafka.consumer和kafka ...

  5. RT-thread内核之对象管理系统

    一.数据结构 1.对象控制块:在include/rtdef.h中定义 /** * Base structure of Kernel object */ struct rt_object { char ...

  6. BZOJ2152:聪聪可可——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2152 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一 ...

  7. HDU1561:The more, The Better——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=1561 ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允 ...

  8. HDU5726:GCD——题解

    题目:hdu的5726 (我原博客的东西,正好整理过来,属于st表裸题) (可以看出我当时有多么的菜--) 这道题写了一遍,然而蒟蒻的我的时间爆炸了-- 于是看了一下学长的代码(顺便在此处%一下学长) ...

  9. 使用javaScript和JQuery制作经典面试题:光棒效果

    使用javaScript与jQuery添加CSS样式的区别和步骤 使用javaScript制作光棒效果 --首先是javaScript <script> $(function () { v ...

  10. MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序

    MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序. 下面给出3中比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 ...