簡體   English   中英

SET .. WHERE .. 批量在 SSMS v18.4 中拋出錯誤

[英]SET .. WHERE .. within batch throwing an error in SSMS v18.4

幾年后我正在重新訪問 MS SQL,因此對一個基本問題表示歉意!

我正在執行一些地址數據清理,將 DR 等縮寫擴展為“DRIVE” RD 到“ROAD”等,以幫助識別重復地址。

我正在探索通過將我現有的 10 個連續 SET .. WHERE .. 語句塊轉換為批處理或其他方法來優化我的查詢的方法,因為我正在處理大約 500k 條記錄。

當我將現有的 SET .. WHERE .. 語句塊轉換為一個簡單的批處理時,這會引發“關鍵字 where 附近的語法不正確”錯誤。 有沒有人有任何想法或建議來解決這個問題? 下面是代碼的樣子(帶有 SET .. WHERE .. 語句的精簡列表):

declare @batchSize int = 10000;
declare @rows int = -1;

while @rows <> 0
begin
 raiserror('Beginning loop. Last ROWCOUNT was %d',0,1, @rows) with nowait;
 update top (@batchSize) DBO.POSTAL_ADDRESS_MATCH_1
 SET ADDRESS1=REPLACE(ADDRESS1,' DR',' DRIVE') WHERE RIGHT(ADDRESS1,3) LIKE ' DR'
 -- 9 other SET WHERE statements go here
 where ID between @startID and @startID + @batchSize;

 set @rows = @@ROWCOUNT;
 set @startID += @batchSize;
end;

非常感謝您的幫助。

這不是UPDATE語句的SET子句的正確語法。 您正在尋找CASE

 UPDATE TOP (@batchSize) DBO.POSTAL_ADDRESS_MATCH_1
 SET ADDRESS1 = 
   CASE 
     WHEN RIGHT(ADDRESS1,3) LIKE ' DR' THEN REPLACE(ADDRESS1,' DR',' DRIVE') 
     WHEN RIGHT(ADDRESS1,3) LIKE ' ST' THEN REPLACE(ADDRESS1,' ST',' STREET') 
     ...etc...
     ELSE ADDRESS1 --<---Leave it alone if there's not a matching pattern.
     END
 where ID between @startID and @startID + @batchSize;

暫無
暫無

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

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