更新来自不同服务器上表的数据

mohan111

我有2个表Employee和Department表

员工:(SQL Server)

EmpID EmpName DOJ
1      Mohan      NULL
2      Manasa     NULL

部门:(Teradata)

DepID     DepName EmpName        DOJ
1        Maths    Mohan K       2017-08-01
2        English  Mohan Kumar 2018-08-01
3        Science  Manasa K    2016-08-01
1        Social   Manasa       2017-09-01

我需要使用Department表更新Employee表的加入日期列。我需要根据MAX条件获取最新的加入日期,并需要通过SSIS使用LIKE条件。

最初,我使用EXECUTE SQL TASK并通过变量发送FULL RESULT SET并将该SQL TASK放入For Each循环容器中

并且需要在Employee表中进行更新,如下所示:

EmpID  EmpName   DOJ
1         Mohan   2018-08-01
2         Manasa  2017-09-01

我用过了

  • EXECUTE SQL TASK:我编写查询SELECT EMPNAME FROM EMPLOYEE并给出完整结果集并存储在变量中的地方
  • 对于每个循环容器:使用ADO.ENUMERATOR并使用该变量。

请提出一种实现此目标的方法

Employee表来自SQL Server,Department表来自Teradata

让我们

(1)如果源和目标在同一服务器上

我认为您可以使用不带Foreach循环容器的Execute SQL Task来实现此目的:

(a)Employee.EmpName =部门.EmpName

With CTE_1 AS (SELECT EmpName  , MAX(DOJ) as mx FROM Department GROUP BY EmpName) 
    UPDATE T1
    SET T1.DOJ = CTE_1.mx
    FROM Employee T1 INNER JOIN CTE_1 ON CTE_1 EmpName = T1.EmpName;

(b)Employee.EmpName = Department.FirstName

如果“部门”表包含全名,而“雇员”表仅包含名,则应使用以下查询:

With CTE_1 AS (CASE WHEN CHARINDEX(' ', EmpName) > 0
               THEN SUBSTRING(EmpName, 1, LEN(EmpName) - CHARINDEX(' ', REVERSE(EmpName)))
               ELSE EmpName END AS   EmpName  
     , MAX(DOJ) as mx FROM Department GROUP BY CASE WHEN CHARINDEX(' ', EmpName) > 0
               THEN SUBSTRING(EmpName, 1, LEN(EmpName) - CHARINDEX(' ', REVERSE(EmpName)))
               ELSE EmpName END) 
    UPDATE T1
    SET T1.DOJ = CTE_1.mx
    FROM Employee T1 INNER JOIN CTE_1 ON CTE_1 EmpName = T1.EmpName;

(c)Department.FirstName以Employee.EmpName开头

或者,如果您要使用不太精确的条件开始加入:

With CTE_1 AS (SELECT EmpName  , MAX(DOJ) as mx FROM Department GROUP BY EmpName) 
    UPDATE T1
    SET T1.DOJ = CTE_1.mx
    FROM Employee T1 INNER JOIN CTE_1 ON CTE_1 EmpName LIKE T1.EmpName + '%';

(2)如果源和目标位于不同的服务器上

(a)在SQL SERVER Management Studio中创建链接服务器

我认为最简单的方法是在SSMS中或通过T-SQL为Teradata数据库创建链接服务器,然后执行上述查询。

(b)使用登台表

另一种方法是将部门表导入到SQL Server中的临时表,然后执行上述查询之一。

(c)将查找与OLEDB命令一起使用

如果您没有创建链接服务器或将数据导入临时表的权限,则可以使用类似的命令从部门表中获取OLE DB源:

SELECT CASE WHEN CHARINDEX(' ', EmpName) > 0
           THEN SUBSTRING(EmpName, 1, LEN(EmpName) - CHARINDEX(' ', REVERSE(EmpName)))
           ELSE EmpName END AS   EmpName  
 , MAX(DOJ) as mx FROM Department GROUP BY CASE WHEN CHARINDEX(' ', EmpName) > 0
           THEN SUBSTRING(EmpName, 1, LEN(EmpName) - CHARINDEX(' ', REVERSE(EmpName))) ELSE EmpName END From Department

并使用OLEDB COMMAND (SQL Server连接)通过类似的命令逐行执行更新操作:

Update Employee SET DOJ = ? WHERE EmpName = ?

在“列映射”选项卡中,将DOJ列映射到第一个参数,将EmpName列映射到第二个参数。如果您不熟悉OLE DB命令,请检查以下示例以了解更多详细信息。


参考文献

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何更新来自React.js中Web套接字服务器的值?

使用来自不同服务器上表的联接创建新表输入?

Ionic 2 Promise来自服务器的不同数据

用来自服务器的不同数据重复div块

在 Svelte 中更新来自 onstate() 的数据

在Angular中使用Rxjs更新来自不同Json来源的Json中的数据

更新来自不同表sqlite3的多行

如何更新来自不同socket.io事件的消息?

更新来自不同类的Java swing组件

使用来自不同数据库和服务器的sys.columns

监视工具包,显示来自服务器的更新数据

使用来自服务器的MySQL数据更新Shiny R中的selectInput

根据来自服务器和本地的数据集更新 TableView

在红移中更新来自多个表的数据

如何从服务器传输不同的数据?

比较来自不同Web服务器的哈希密码

从服务器更新 ChartJS 图形的数据

如何检索服务器上表单提交的内容?

来自不同服务器的http服务器和Web套接字

如何为服务器上表格视图单元格中的每个帖子更新类似按钮

提供来自服务器的定期更新的映像,而不会损坏

不同的不能在来自另一台服务器的选择数据库中工作

将2 #temp表与来自不同服务器的数据连接在一起SQL Server

在同一台服务器中使用来自不同域的两个数据库

Android MVVM:当相同数据是来自不同服务器端点的响应的一部分时,如何从另一个存储库更新存储库中的数据?

仅当数据来自服务器时如何激活组件?

在ag-grid中显示来自服务器的数据

来自服务器和核心数据的NSOrderedSet响应

来自远程服务器的 NativeScript 自动完成数据