2009-07-24 15 views
6

Tôi có một con trỏ máy chủ SQL. Tôi muốn bỏ qua một lần lặp của vòng lặp khi một điều kiện cụ thể xảy ra. Break sẽ đưa bạn ra khỏi vòng lặp con trỏ và tiếp tục dường như không làm bất cứ điều gì.SQL Server Làm thế nào để bạn lặp lại mặc dù một con trỏ vòng lặp khi một điều kiện cụ thể xảy ra

Có một lệnh cho biết "hey hồ sơ này không tốt nên hãy tiếp tục và bỏ qua nó và làm việc tiếp theo".

Bằng cách này tôi biết con trỏ là ác như trình điều khiển đi 43 MPH trong làn đường đi qua, nhưng thường xảy ra trong phần mềm tôi đang mắc kẹt với nó.

Cảm ơn

Trả lời

7

Tại sao don' bạn chỉ sử dụng câu lệnh if:

IF condition exists that I want to update THEN 
BEGIN 

.... 

END 

Fetch Next 
+1

Cảm ơn bạn đó là câu trả lời đúng. – codingguy3000

0

Có thể dễ dàng hơn để trả lời câu hỏi này nếu chúng tôi biết mã con trỏ trông như thế nào. Có lẽ bạn có thể đặt trong một câu lệnh if để kiểm tra điều kiện và chỉ làm điều gì đó nếu điều kiện không có mặt.

9

nếu bạn mã vòng lặp của bạn với tìm nạp ở dưới cùng (với tìm nạp ban đầu trước vòng lặp) tiếp tục sẽ chỉ chuyển bạn lên trên cùng và xử lý lại hàng đó. bạn có thể sử dụng một GOTO để nhảy đến phần tìm nạp ở phía dưới hoặc cấu trúc lại vòng lặp để tìm nạp ở đầu và đồng xu sẽ hoạt động.

bạn có thể sửa đổi vòng lặp của bạn để sử dụng GOTO ...

... 
... 
if <condition> 
BEGIN 
    GOTO Fetch_Next 
END 
.... 
.... 
Fetch_Next: 
FETCH NEXT FROM ... 

Dưới đây là một số mẫu mã cho chỉ có một lấy ở phía trên của vòng lặp, tiếp tục sẽ làm việc:

DECLARE <cursor_name> CURSOR FOR 
    SELECT 
    FROM 
    WHERE 
    FOR READ ONLY 

--populate and allocate resources to the cursor 
OPEN <cursor_name> 

--process each row 
WHILE 1=1 
BEGIN 

    FETCH NEXT FROM <cursor_name> 
     INTO @a, @b, @c 

    --finished fetching all rows? 
    IF @@FETCH_STATUS <> 0 
    BEGIN --YES, all done fetching 
     --exit the loop 
     BREAK 
    END --IF finished fetching 

    --do something here-- 
    --do something here-- 

    IF <your condition> 
    BEGIN 
     CONTINUE -- fetch next row 
    END 

    --do something here-- 
    --do something here-- 

END --WHILE 

--close and free the cursor's resources 
CLOSE <cursor_name> 
DEALLOCATE <cursor_name> 
+0

Thống kê Goto đã giúp ích rất nhiều. Cảm ơn bạn. –

0

Câu trả lời rẻ là chèn khối IF: bắt đầu vòng lặp/NẾU hàng là tốt BEGIN ... Vòng kết thúc/kết thúc.

0

Tôi chưa bao giờ tìm thấy con trỏ SQL mà tôi không thể xóa bằng một chút suy nghĩ và hiệu suất đạt được thường rất lớn. Có lý do nào mà bạn không thể chọn chỉ những hàng bạn muốn vận hành, thay vì thực hiện xử lý hàng theo hàng không?

Các vấn đề liên quan