2013-11-26 57 views
2

我在SQL Server 2008 R2中工作。我有一个表格,它将成为我的SSRS报告的主要活动表格。我需要使用另一个表中的信息来更新表格,该表格由重复性作业创建,该表格查询我的ERP数据库并收集特定记录。我需要用另一个表中的五个字段来更新主表,而不会干扰现有的数据。使用存储过程从另一个表更新表

主表中有14个领域,从ERP表中有6中常见的有: 招聘# 作业名 参考 页面 截止日期 客户

如果作业#在主表我存在想转移到下一个记录。我打算做一个存储过程,每次都会通过记录。我在Excel中完成了这项工作,但没有在SQL中完成。另外从最佳实践的角度来看,我最好是将ERP数据库的查询和此更新放在单个存储过程中,还是创建一个新的并创建一个连续运行它的作业?

回答

5

SQL是基于设置的,所以你应该尽力避免任何逐行逻辑。没有你的模式,我只是猜测,但... ...

UPDATE main 
set Field1 = other.Field1, 
    Field2 = other.Field2, 
    Field3 = other.Field3 
from MainTable main 
INNER JOIN ERP other 
ON main.[Job#] = other.[Job#] 
and main.JobName = other.JobName 
and main.Reference = other.Reference 
and main.Pages = other.Pages 
and main.[Due Date] = other.[Due Date] 
and main.Customer = other.Customer 
+0

我想他说他想跳过匹配的工作号码。如果是这样,失去第一个JOIN语句,并在最后添加“WHERE NOT EXISTS(SELECT 1 FROM main WHERE [JOB#] = other。[JOB#])”到最后。 –

+0

这里是我最终使用:\t合并DashMaster一个 \t使用DashActiveJobs B关于a.Activity \t = b.Ref \t时没有目标,然后 \t插入(活动,作业名,jobnumber可以页) \t匹配值(b.Ref,b.JobName,b.JobNumber,b.Pages); –

相关问题