Query

使用最長的 varchar 欄位更新欄位

  • February 2, 2021

我需要更新表中的 varchar 欄位,但只有最長的 varchar 記錄(其中包含最多的數據。)。我可以通過以下查詢輕鬆找到它:

SELECT TOP(1) options
FROM ForrasReportsRicsiTeszt
ORDER BY LEN(options) DESC

現在我需要更新它,但我對 sql 非常陌生。這是一個 2005 毫秒的 sql 伺服器。

我的更新查詢:

 UPDATE ForrasReportsRicsiTeszt
 SET options = REPLICATE(options, 4)
 WHERE TOP(1) ORDER BY LEN(options) DESC

這給了我一個 TOP(1) 的錯誤,這是意料之中的。我只是不知道編寫此查詢的正確方法,我怎麼能只更新最長的 varchar 欄位?我設法用我的選擇查詢得到的那個。可悲的是,沒有可以在 WHERE 中使用的主鍵。

任何幫助將非常感激!

使用MAX函式,您可以編寫以下內容來獲取具有最長 varchar 的條目

SELECT 
 MAX(LEN(options))
FROM 
 ForrasReportsRicsiTeszt;

然後可以將其與 UPDATE 語句結合起來給出

UPDATE ForrasReportsRicsiTeszt
SET
  options = REPLICATE(options, 4)
WHERE
  LEN(options) = (  SELECT 
                    MAX(LEN(options))
                  FROM 
                   ForrasReportsRicsiTeszt
              );

或者,您可以使用Common Table Expression (CTE)

;WITH MyTestCTE ( LengthLogngestOption)
AS (
   SELECT 
     MAX(LEN(options))
   FROM 
     ForrasReportsRicsiTeszt
  )
UPDATE FRRT
  SET FRRT.Options = REPLICATE(options,4)
FROM
  ForrasReportsRicsiTeszt FRRT
JOIN
  MyTestCTE MTCTE
ON
LEN(FRRT.OPTIONS) = MTCTE.LengthLogngestOption;

引用自:https://dba.stackexchange.com/questions/284512