使用SQL Server 2012的查询结果更新现有表

使用SQL Server 2012的查询结果更新现有表,sql,sql-server-2012-express,Sql,Sql Server 2012 Express,我正在尝试将查询结果添加到现有表的列中。到目前为止,下面的查询找到了距离电线30公里内最近的变电站 Select el1.id, el1.geog4269.STAsText(), (Select TOP 1 es.name from Test.dbo.electric_substations as es with (index(sidx_es)) WHERE el1.geog4269.STDistance(es.geog) < 30000 order

我正在尝试将查询结果添加到现有表的列中。到目前为止,下面的查询找到了距离电线30公里内最近的变电站

Select el1.id, 
   el1.geog4269.STAsText(), 
   (Select TOP 1 es.name from Test.dbo.electric_substations as es
    with (index(sidx_es))
    WHERE el1.geog4269.STDistance(es.geog) < 30000
    order by el1.geog4269.STDistance(es.geog)
    )As NearestElectricSubstation
    from Test.dbo.electric_lines AS el1;
我想用结果中的el1.id更新id,用el1.geog4269.statext更新位置,用NearestElectricSubstation更新最近的_Esub。我正在尝试更新查询,但没有得到任何结果。感谢您的帮助。多谢各位

 Update Test.dbo.NNElines
SET id = el1.id,
 Location = el1.geog4269.STAsText()
From(
Select 
fnc.el1.id, 
fnc. el1.geog4269.STAsText()
From Test.dbo.electric_lines AS el1
   CROSS APPLY 
   (Select TOP 1 es.name from Test.dbo.electric_substations as es
    with (index(sidx_es))
    WHERE el1.geog4269.STDistance(es.geog) < 30000
    order by el1.geog4269.STDistance(es.geog)
    ) fnc
    --As NearestElectricSubstation
    --from Test.dbo.electric_lines AS el1;
    );

试试这个。更新表时可以使用联接。因此,我将您的查询加入到ID上的NNElines表中,并使用查询中的相应值更新NNElines表

UPDATE NNElines
SET a.location = b.geog4269.STAsText(),
  a.Nearest_Esub = b.NearestElectricSubstation
FROM NNElines a
JOIN
  (Select el1.id, 
    el1.geog4269.STAsText(), 
    (Select TOP 1 es.name from Test.dbo.electric_substations as es with (index(sidx_es))
       WHERE el1.geog4269.STDistance(es.geog) < 30000
       order by el1.geog4269.STDistance(es.geog)
    )As NearestElectricSubstation
  from Test.dbo.electric_lines AS el1) b 
ON a.id = b.id

你需要使用。这让人困惑。您正在尝试更新NNElines中存在的现有行还是插入新行?表中已经创建了行,因此我仅尝试更新表。希望现在清楚,我刚刚开始使用它,非常抱歉confusion@Jonast92到目前为止,我已经更新了我尝试过的内容。谢谢UPDATE语句的工作方式如下:UPDATE COLUMN SET field=条件所在的值。在本例中,您的值是select语句,最好使用join进行配置,但不一定。
UPDATE NNElines
SET a.location = b.geog4269.STAsText(),
  a.Nearest_Esub = b.NearestElectricSubstation
FROM NNElines a
JOIN
  (Select el1.id, 
    el1.geog4269.STAsText(), 
    (Select TOP 1 es.name from Test.dbo.electric_substations as es with (index(sidx_es))
       WHERE el1.geog4269.STDistance(es.geog) < 30000
       order by el1.geog4269.STDistance(es.geog)
    )As NearestElectricSubstation
  from Test.dbo.electric_lines AS el1) b 
ON a.id = b.id