我有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
我用过了
SELECT EMPNAME FROM EMPLOYEE
并给出完整结果集并存储在变量中的地方请提出一种实现此目标的方法
Employee表来自SQL Server,Department表来自Teradata
我认为您可以使用不带Foreach循环容器的Execute SQL Task来实现此目的:
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;
如果“部门”表包含全名,而“雇员”表仅包含名,则应使用以下查询:
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;
或者,如果您要使用不太精确的条件开始加入:
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 + '%';
我认为最简单的方法是在SSMS中或通过T-SQL为Teradata数据库创建链接服务器,然后执行上述查询。
另一种方法是将部门表导入到SQL Server中的临时表,然后执行上述查询之一。
如果您没有创建链接服务器或将数据导入临时表的权限,则可以使用类似的命令从部门表中获取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] 删除。
我来说两句