2009-10-03 54 views
28

一個do-while循環,我試圖找出如何在TSQL實現這個如何實現在TSQL

通過的Transact-SQL提供
do 
    update stuff set col = 'blah' where that_row = 'the right one' 
    select trash from stuff ... 
until some_condition 

唯一的迭代控制流程句話是while (condition) sentences首先計算該條件如果該條件成立,則執行該句子。

我想在這樣直到某些條件觸發Ÿ執行的最後更新是實現在一個表執行UPDATE語句的情況。

最重要的是,我正在尋找的髒少的辦法解決這個問題(複製更新前的WHILE沒有什麼太大的意義對我來說作爲更新句可以任意長而複雜的)


編輯:我試圖解決的問題涉及同一個表下的多個UPDATE語句,每個UPDATE語句都會從之前的迭代中獲取和轉換值。在一個大的UPDATE語句中,這是不可能的,因爲每行只會被計算和更新一次,所以循環是我能弄清楚這個混亂的唯一方法。

+4

如果你想流控制數據庫的代碼,你就錯了。 – 2009-10-03 03:45:53

+4

不要這麼僵化,有時候需要在存儲過程中開發業務邏輯。 – Rodrigo 2009-10-03 03:53:34

+0

@rodrigo,他ISN;談論它是一個存儲過程,他在都在談論使用一套理論,而不是一德路。有可能避免大約99%的時間循環,如果可以的話,總是最好這樣做。 – HLGEM 2015-01-30 21:42:26

回答

39

這實際上是一個do-while循環:

WHILE (1=1) 
    BEGIN 

    -- Do stuff... 

    IF (some_condition is true) 
    BREAK; 

    END 

但作爲@Joel Coehoorn所指出的,總是首先嚐試使用基於集合的方法。如果我想不出用set操作解決問題的方法,我只會訴諸於循環。

+1

1不是一個布爾值,而不是這個(1 = 1)可以完成這項工作。此解決方案的工作原理非常簡單。閱讀後似乎很明顯!非常感謝。 – Rodrigo 2009-10-03 04:01:19

+1

@Rodrigo:已更新。謝謝。 – 2009-10-03 04:08:26

+8

這將工作,但男人如果寫「1 = 1」是不是在生產代碼鬱悶... – 2011-01-21 19:03:49