使用另一个表上同一行的元素更新表的值

时间:2019-03-29 11:50:29

标签: sql sql-server sql-update ssms

我有一个表A,其中有许多行,并且有一个函数返回只有一行的表B。我需要使用B中函数返回的标准值来更新A.Other和A.ID的每个值,所以从:

---------- TABLE A ---------      ------------ TABLE B ------------
id     Name   ID   Other        Def_Other   Def_Province   Def_ID 
1        x    1    asqas         hello        PD            0
2        y    10   asd
3        Z    12   adf      

表A应该变为:

---------- TABLE A --------- 
id     Name   ID   Other     
1        x     0   hello    
2        y     0   hello
3        Z     0   hello

我尝试过

update dbo.Table_A 
set Other = select top 1 name FROM dbo.generate_table_b(1)

但是无法做到。 是否可以在不为每个column \ type声明变量的情况下做到这一点?我必须编辑许多不同类型的字段。 预先感谢。

2 个答案:

答案 0 :(得分:1)

我想你想要

update a
    set Other = b.name,
        id = b.Def_ID 
    from dbo.Table_A a cross join
         dbo.generate_table_b(1) b;

答案 1 :(得分:0)

您可以使用APPLY

UPDATE a
      set a.id = b.Def_ID,
          a.Other = b.Def_Other 
FROM tablea a CROSS APPLY
     (SELECT b.*
      FROM dbo.generate_table_b(1)
     ) b;