Czy istnieje metoda implementacji do while
pętli w SQL Server 2008?
sql-server
sql-server-2008
loops
while-loop
do-while
Nithesh Narayanan
źródło
źródło
Odpowiedzi:
Nie jestem pewien co do DO-WHILE W MS SQL Server 2008, ale możesz zmienić logikę pętli WHILE, tak aby UŻYWAĆ jak pętla DO-WHILE.
Przykłady są pobierane stąd: http://blog.sqlauthority.com/2007/10/24/sql-server-simple-example-of-while-loop-with-continue-and-break-keywords/
Ale staraj się unikać pętli na poziomie bazy danych. Odniesienie .
źródło
Jeśli
GOTO
słowo kluczowe nie jest bardzo urażone , może zostać użyte do symulacji znakuDO
/WHILE
w T-SQL. Rozważmy następujący, raczej bezsensowny przykład zapisany w pseudokodzie:Oto odpowiednik kodu T-SQL przy użyciu goto:
Zwróć uwagę na mapowanie jeden do jednego między
GOTO
włączonym rozwiązaniem a oryginalnymDO
/WHILE
pseudokodem. Podobna implementacja wykorzystującaWHILE
pętlę wyglądałaby następująco:Teraz możesz oczywiście przepisać ten konkretny przykład jako prostą
WHILE
pętlę, ponieważ nie jest to dobry kandydat na konstrukcjęDO
/WHILE
. Nacisk położono na przykład raczej na zwięzłość niż możliwość zastosowania, ponieważ uzasadnione przypadki wymagające aDO
/WHILE
są rzadkie.POWTARZAJ / DO KOGOŚ (NIE działa w T-SQL)?
... i
GOTO
rozwiązanie oparte na T-SQL:Dzięki kreatywnemu użyciu
GOTO
i inwersji logiki za pomocąNOT
słowa kluczowego istnieje bardzo ścisły związek między oryginalnym pseudokodem aGOTO
rozwiązaniem bazowym . Podobne rozwiązanie z wykorzystaniemWHILE
pętli wygląda następująco:Można argumentować, że w przypadku
REPEAT
/UNTIL
,WHILE
rozwiązanie bazowe jest prostsze, ponieważ warunek if nie jest odwrócony. Z drugiej strony jest też bardziej szczegółowy.Gdyby nie cała pogarda związana z używaniem programu
GOTO
, mogłyby to być nawet idiomatyczne rozwiązania na te kilka razy, gdy te szczególne (złe) konstrukcje pętli są konieczne w kodzie T-SQL ze względu na przejrzystość.Używaj ich według własnego uznania, starając się nie cierpieć gniewu innych programistów, gdy złapią cię na bardzo oczernianym
GOTO
.źródło
Wydaje mi się, że czytałem ten artykuł więcej niż raz, a odpowiedź jest tylko bliska tego, czego potrzebuję.
Zwykle, gdy myślę, że będę potrzebować
DO WHILE
w T-SQL, dzieje się tak, ponieważ iteruję kursor i szukam w dużej mierze optymalnej przejrzystości (w porównaniu z optymalną prędkością). W T-SQL wydaje się pasować doWHILE TRUE
/IF BREAK
.Jeśli to jest scenariusz, który Cię tu sprowadził, ten fragment może Ci zaoszczędzić chwilę. W przeciwnym razie witaj z powrotem, ja. Teraz mogę być pewien, że byłem tu więcej niż raz. :)
Niestety, T-SQL nie wydaje się oferować czystszego sposobu pojedynczego zdefiniowania operacji pętli niż ta nieskończona pętla.
źródło
Możesz także użyć zmiennej wyjścia, jeśli chcesz, aby Twój kod był nieco bardziej czytelny:
Byłoby to prawdopodobnie bardziej istotne, gdy masz bardziej skomplikowaną pętlę i próbujesz śledzić logikę. Jak wspomniano, pętle są drogie, więc jeśli możesz, spróbuj użyć innych metod.
źródło
Tylko While Loop jest oficjalnie obsługiwany przez serwer SQL. Jest już odpowiedź na pętlę DO while. Szczegółowo opisuję sposoby uzyskiwania różnych typów pętli w serwerze SQL.
Jeśli wiesz, i tak musisz ukończyć pierwszą iterację pętli, możesz wypróbować wersję DO..WHILE lub REPEAT..UNTIL serwera SQL.
DO..WHILE Loop
Pętla REPEAT..UNTIL
Dla pętli
Odniesienie
źródło