2013-05-20 31 views
1

請參閱下面的代碼:沖洗打印語句客戶端(SQL Server Management Studio中)

USE [Test] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[Test] 
AS 
BEGIN 
begin tran 
begin try 
    SET NOCOUNT ON; 
    DECLARE @ID int 
    DECLARE @Count int 
    set @Count=0 
    DECLARE Employee_Cursor CURSOR FOR 
SELECT id 
FROM Person3; 
OPEN Employee_Cursor; 
FETCH NEXT FROM Employee_Cursor INTO @ID 
WHILE @@FETCH_STATUS = 0 
    BEGIN  
     WAITFOR DELAY '000:00:01' 
     SET @Count = @Count+1 
     Print @Count   
     FETCH NEXT FROM Employee_Cursor INTO @ID; 
    END; 
    commit tran 
CLOSE Employee_Cursor; 
DEALLOCATE Employee_Cursor; 
end try 
begin catch 
ROLLBACK tran 
end catch 
END 

存儲過程運行,然後將下面的輸出一下子刷新到客戶端(因爲有三個記錄在:person3):

1 
2 
3 

如何在每次迭代遊標時將輸出刷新到客戶端?我正在尋找一個與SQL Server 2005兼容的答案。

我試過使用RAISEERROR語句,因爲這裏描述爲:How do I flush the PRINT buffer in TSQL?,但所有語句仍然出現在最後。

+0

您可以使用GO(批次分隔符)刷新的消息,但因爲你是在一個交易(巨批)我不認爲這會工作。另外,如果可能的話,應該避免在SQL中使用遊標和WAITFOR。 – StingyJack

+0

您是否嘗試過沒有try/catch塊的完全相同的查詢? – Tombatron

+0

使用RAISERROR('foo',10,1)WITH NOWAIT ::在執行查詢期間,輸出顯示在SSMS中的消息選項卡中。的 – mobill

回答

相關問題