Sql server 基于第一个表中的值/键更新第二个表

Sql server 基于第一个表中的值/键更新第二个表,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我有两个表(一个表是从xml创建的)。 我必须根据第一个表中的值和键更新第二个表中的列 表具有相同的列。第一张表: DECLARE @tblORAS_NET TABLE ( ORAS_KEY INT, ORAS_NET DECIMAL(15,4) ) 第二个表几乎相同: DECLARE @tblORAS_NET1 TABLE (

我有两个表(一个表是从xml创建的)。 我必须根据第一个表中的值和键更新第二个表中的列

表具有相同的列。第一张表:

DECLARE @tblORAS_NET TABLE
       (             
             ORAS_KEY INT,
             ORAS_NET DECIMAL(15,4)
       )
第二个表几乎相同:

DECLARE @tblORAS_NET1 TABLE
           (             
                 ORAS_KEY INT,
                 ORAS_NET DECIMAL(15,4)
           )
我的问题是-如何根据第一个表中的
ORAS\u NET
和第一个表中的
ORAS\u KEY
更新第二个表中的
ORAS\u NET
?我的主要问题是,我不知道如何在
ORAS\u键
上写入where条件,同时获取
ORAS\u网

declare @xml_ORAS_NET xml = '<DataTable>
<TR><ORAS_KEY>1</ORAS_KEY><ORAS_NET>284.03</ORAS_NET></TR>
<TR><ORAS_KEY>2</ORAS_KEY><ORAS_NET>543.12</ORAS_NET></TR>
<TR><ORAS_KEY>3</ORAS_KEY><ORAS_NET>981.91</ORAS_NET></TR>
</DataTable>';

DECLARE @tblORAS_NET TABLE
       (             
             ORAS_KEY INT,
             ORAS_NET DECIMAL(15,4)
       )

       IF (@xml_ORAS_NET IS NOT NULL)
       BEGIN
             INSERT INTO @tblORAS_NET (ORAS_KEY, ORAS_NET)
        SELECT 
             DataTable.TR.value('ORAS_KEY[1]','INT') AS ORAS_KEY,
             DataTable.TR.value('ORAS_NET[1]','DECIMAL(15,4)') AS ORAS_NET
        FROM @xml_ORAS_NET.nodes('/DataTable/TR') DataTable(TR) 
       END


          select * from @tblORAS_NET


    DECLARE @tblORAS_NET1 TABLE
       (             
             ORAS_KEY INT,
             ORAS_NET DECIMAL(15,4)
       )

       insert into @tblORAS_NET1(oras_key) values(1),(2),(3)

       select * from @tblORAS_NET1
declare@xml\u ORAS\u NET xml='1〕
1284.03
2543.12
3981.91
';
声明@tblORAS\u净表
(             
ORAS_KEY INT,
ORAS_净十进制数(15,4)
)
IF(@xml\u ORAS\u NET不为空)
开始
插入@tblORAS\u网络(ORAS\u键,ORAS\u网络)
挑选
DataTable.TR.value('ORAS_键[1],'INT')作为ORAS_键,
DataTable.TR.value('ORAS_NET[1],'DECIMAL(15,4)')作为ORAS_NET
来自@xml\u ORAS\u NET.nodes('/DataTable/TR')DataTable(TR)
结束
从@tblORAS\u NET中选择*
声明@tblORAS\u NET1表
(             
ORAS_KEY INT,
ORAS_净十进制数(15,4)
)
在@tblORAS_NET1(oras_键)中插入值(1)、(2)、(3)
从@tblORAS\u NET1中选择*

我相信这是你想要的更新声明-尽管你还没有说明你的预期结果,所以我有点摸不着头脑

   update net1
   set net1.ORAS_NET = net.ORAS_NET
   from @tblORAS_NET net 
   join @tblORAS_NET1 net1 
     on net.ORAS_KEY = net1.ORAS_KEY

我相信这是你想要的更新声明-虽然你还没有声明你的预期结果,所以我在暗中试探一下

   update net1
   set net1.ORAS_NET = net.ORAS_NET
   from @tblORAS_NET net 
   join @tblORAS_NET1 net1 
     on net.ORAS_KEY = net1.ORAS_KEY

不管怎样,这似乎是正确的方向。这是一个公平的警察,肖恩。更新我的答案以使用“加入”。不管怎样,这似乎是正确的方向。这是一个公平的警察,肖恩。更新我的答案以使用“加入”。