使用SQL Server 2012的查询结果更新现有表
我正在尝试将查询结果添加到现有表的列中。到目前为止,下面的查询找到了距离电线30公里内最近的变电站使用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
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