簡體   English   中英

SQL Server 2008:有條件地更新表列

[英]SQL Server 2008: updating table columns conditionally

我對SQL還是很陌生,所以請耐心等待。

為了簡化我的問題,假設我有兩個具有相同屬性/字段的個人表,例如ID,last_name,first_name,date_of_birth,街道,城市,州,郵政編碼。

我希望根據表1中的內容對表2進行更新,但是我想保留表2中的數據,這些數據是自上次從表1刷新以來添加的。

它歸結為兩個我不知道如何轉換為SQL查詢的邏輯軌道:

  1. 更新表2中為空的列
  2. (這是我不知道的方法)更新表2中的列,包括覆蓋現有數據,除非表1中對應列的替代將使用空值替代表2中的數據。

提前致謝

更新

好的,所以這兩個表開始時是相同的:

人表

然后,用戶將更新表2,而表1也將在同一時間收到更新。

假設ID 1的名字和中間名稱在表2中已更新,而ID 2的中間名稱在表1中已更新。

人員表在更新前發生更改

所以現在,我正在嘗試提出一個SP,它將基於表1並使用我上面描述的邏輯來更新表2。

即使表2中的每一列都覆蓋了現有數據,也應將其覆蓋。 因此,“約翰”將再次成為蕾切爾。 我想對此進行覆蓋的例外情況是,表2中的數據將被空值覆蓋。

因此,雖然John將被覆蓋回Rachel,但William作為Middle_name應該保留在表2中,因為表1對該ID(ID 1)具有空值,所以我會發布所需輸出的另一張圖片,但是顯然我這樣做了尚無足夠的聲譽來發布2個以上的鏈接。 所以這是我想要的文本輸出

更新后的Person_2

ID |姓氏|名字|中間名

1 | Addy | Rachel | William

2 | Aguilar | Richard | Geoffrey

3 | ...

好吧,我終於明白了。 這是我所做的。

如果有人有更有效的方式來做到這一點,我會很高興。 謝謝。

SELECT Person_2.id

  ,CASE WHEN Person_2.ID=Person_1.id 
           AND Person_2.last_name IS NULL 
               THEN Person_1.last_name 

           WHEN Person_2.ID=Person_1.id 
           AND Person_2.last_name IS NOT NULL 
           AND Person_1.last_name IS NULL
               THEN Person_2.last_name

           WHEN Person_2.ID=Person_1.id 
           AND Person_2.last_name IS NOT NULL 
           AND Person_1.last_name IS NOT NULL
               THEN Person_1.last_name                   

               END AS last_name  


  ,CASE WHEN Person_2.ID=Person_1.id 
           AND Person_2.first_name IS NULL 
               THEN Person_1.first_name 

           WHEN Person_2.ID=Person_1.id 
           AND Person_2.first_name IS NOT NULL 
           AND Person_1.first_name IS NULL
               THEN Person_2.first_name

           WHEN Person_2.ID=Person_1.id 
           AND Person_2.first_name IS NOT NULL 
           AND Person_1.first_name IS NOT NULL
               THEN Person_1.first_name                   

               END AS first_name  


  ,CASE WHEN Person_2.ID=Person_1.id 
           AND Person_2.middle_name IS NULL 
               THEN Person_1.middle_name 

           WHEN Person_2.ID=Person_1.id 
           AND Person_2.middle_name IS NOT NULL 
           AND Person_1.middle_name IS NULL
               THEN Person_2.middle_name

           WHEN Person_2.ID=Person_1.id 
           AND Person_2.middle_name IS NOT NULL 
           AND Person_1.middle_name IS NOT NULL
               THEN Person_1.middle_name                   

               END AS middle_name      

FROM Person_2 
   LEFT JOIN [Person_1]  ON Person_2.id=Person_1.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM