【问题标题】:Update one by one records using loop in SQL Server在 SQL Server 中使用循环逐一更新记录
【发布时间】:2023-03-27 16:32:01
【问题描述】:

我有扇区 ID,需要使用循环将每个扇区 ID 的扇区名称和扇区短名称分别更新为“扇区 1”和“扇区 1”。我怎样才能做到这一点?

SectorID    SectorName  SectorShortName
---------------------------------------
1   METALS  METAL
2   FINANCIAL SERVICES  FINAN
3   IT  IT
4   SERVICES    SERVI
5   PHARMA  PHARM
6   CHEMICALS   CHEMI
7   TEXTILES    TEXTI
8   ENERGY  ENERG
9   INDUSTRIAL MANUFACTURING    INDUS
10  CEMENT & CEMENT PRODUCTS    CEMEN
11  CONSUMER GOODS  CONSU
12  CONSTRUCTION    CONST
13  TELECOM TELEC
14  AUTOMOBILE  AUTOM
15  HEALTHCARE SERVICES HEALT
16  FERTILISERS & PESTICIDES    FERTI
17  MEDIA & ENTERTAINMENT   MEDIA
18  PAPER   PAPER
19  PENDING UPDATION    PENDING
20  OTHERS  OTHERS
21  FINANCIAL SERVICES - HFC (AA and Above) FS-HFC-AA
22  Scheduled Commercial Bank   SCB
23  FINANCIAL SERVICES - PSU, PFI (AAA)     PSUPFIAAA
24  NO  NO
25  YES YES
26  FINANCIAL SERVICES - HFC (Below AA) FSHFC<AA
27  Other than PSU, PFI & PSB   Limit Appl
28  PSU PSU
29  PSB PSB
30  PFI PFI
31  SOVEREIGN   SOVEREIGN

【问题讨论】:

  • 为什么要选择loop?但是,这可以通过单个 update 语句轻松实现。
  • 因为我还有其他数据库也有相同的表结构,如果我必须更新它只会运行一次,而使用循环它会一般。

标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2008-r2


【解决方案1】:

您只需使用update:

update sectors
    set SectorName = replace('sector [n]', '[n]', id),
        SectorShortName = replace('sector [n]', '[n]', id);

绝对没有理由为此使用循环。或者更具体地说,update 使用基于集合的操作覆盖了表中的所有行,因此效率更高,代码更短。

【讨论】:

    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 2014-01-06
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多