簡體   English   中英

SQL我該如何更新?

[英]SQL How do i update like this?

我正在嘗試更新[Temp_LTGData]表中的所有SQL行,將[CORP_REG_NO]值設置為與[CUSTOMER_NUMBER]匹配的同一表中另一行的值。

最終,我需要用很多列來做到這一點,有人知道這是否可以完成嗎?

我似乎無法像選擇查詢中那樣使用LTGSource別名:(

 Update [MandS].[dbo].[Temp_LTGData] LTGSource
    Set [CORP_REG_NO] = (SELECT [CORP_REG_NO] 
                           FROM [MandS].[dbo].[Temp_LTGData] 
                          WHERE ([CORP_REG_NO] IS NULL 
                            AND [CUSTOMER_NUMBER] = LTGSource.[CUSTOMER_NUMBER] ))
  where [CORP_REG_NO] IS NULL

感謝您提供的反饋,這些反饋確實很棒,我什至學會了一些解決此問題的方法(為大家投票)。

嘗試以下操作以確切地了解您的工作

UDPATE [MandS].[dbo].[Temp_LTGData] LTGSource 
SET [CORP_REG_NO] = (SELECT [CORP_REG_NO] 
                     FROM [MandS].[dbo].[Temp_LTGData] 
                     WHERE ([CORP_REG_NO] IS NULL 
                          AND [CUSTOMER_NUMBER] = ToUpdate.[CUSTOMER_NUMBER] )) 
FROM {MandS].[dbo].[Temp_LTGData] ToUpdate
where [CORP_REG_NO] IS NULL

但是,您在查詢中有一個錯誤,我相信子查詢應該是IS NOT NULL。

這樣的事情將使您能夠處理帶有源行和目標行的許多列

如果您需要為不同的列鏈接不同的行,那么它會更復雜

如果我理解正確,那么過濾到CORP_REG_NO IS NULL只會對CORP_REG_NO起作用,因此您不想進行過濾,只能根據您的問題將目標和源行限制為獨立於特定的列過濾器。

Update
   target
Set
   [CORP_REG_NO] = CASE WHEN target.[CORP_REG_NO] IS NULL THEN source.[CORP_REG_NO] ELSE target.[CORP_REG_NO] END,
    ...and again...
FROM
    [MandS].[dbo].[Temp_LTGData] target
    JOIN
    [MandS].[dbo].[Temp_LTGData] source ON target.[CUSTOMER_NUMBER] = source.[CUSTOMER_NUMBER]
WHERE
    a filter to restrict rows perhaps

嘗試這個:

UPDATE Temp_LTGData LTGSource
  SET Col1 = L2.Col1, Col2 = L2.Col2, Col3 = L2.Col3
FROM LTGSource L1
JOIN LTGSource L2 ON L2.CORP_REG_NO IS NOT NULL AND L1.CUSTOMER_NUMBER = L2.CUSTOMER_NUMBER
WHERE L1.CORP_REG_NO IS NULL 

那應該為你做。 您正在將可更新表聯接到自身,因此可以訪問更新的舊行和新行。 這樣,您可以一次更新多個列。

暫無
暫無

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

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