SQL Server使用另一个列中的列更新一个表中的列

时间:2017-03-14 16:12:03

标签: sql sql-server sql-server-2012

noob SQL问题在这里。我在SQL Server 2012中有一个数据库,可以使用我想要提取的信息访问另一个MySQL数据库。

我想更新表示工作站数量的列,并且该信息存在于其他数据库中。我想构建一个查询来更新每个数据库中模型编号匹配的所有项目的数量。

我将包含两个选择语句来演示我想要使用的内容。

我要从其他数据库中提取的数据。

SELECT * 
FROM OPENQUERY(S3MONITOR, 
'SELECT count(BuildDriver) AS ''# of Workstations'', BuildDriver AS ''Workstation Model''
FROM workstation 
GROUP BY BuildDriver')

产生此结果

enter image description here

我想要更新的数据库。

SELECT NumOfDevices, Model
FROM dbo.Currency
INNER JOIN dbo.SubCategory
ON Currency.SubCategoryId = SubCategory.SubCategoryId
WHERE SubCategory.SubCategoryName = 'WorkStation';

产生此结果

enter image description here

模型将在我的数据库中更新,以确保模型名称彼此对应,但在此期间,我想使用M93z测试查询。那么,使用其他数据库中的#of Workstations来更新数据库中NumofDevices的最理想方式是什么呢?

很抱歉,如果这是一个显而易见的问题,我仍然是一个SQL菜鸟,当谈到这些事情时,我仍然不直观。

编辑:最终目标是通过SQL Server代理预定作业每晚定期更新所有工作站数量,但是当我来到它时我会越过那座桥(我实际上有一些信心,我将能够应用一旦发现它,就立即查询该工作的解决方案)但我希望在更改您的任何建议时包含此信息。

1 个答案:

答案 0 :(得分:1)

您可以在join声明中使用update

with newvals as (
      SELECT * 
      FROM OPENQUERY(S3MONITOR, 
'SELECT count(BuildDriver) AS ''# of Workstations'', BuildDriver AS ''Workstation Model''
 FROM workstation 
 GROUP BY BuildDriver'
                    ) oq
     )
update c
    set NumOfDevices = newvals.num_workstations
    from dbo.Currency c join
         dbo.SubCategory sc
         on c.SubCategoryId = sc.SubCategoryId join
         newvals
         on newvals.model = c.model
where sc.SubCategoryName = 'WorkStation';

注意:这会更新表中已有的值。如果您还想添加新行,也可以使用merge。如果是这种情况,请提出另一个问题,因为这个问题具体是关于更新。