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?,但所有語句仍然出現在最後。
您可以使用GO(批次分隔符)刷新的消息,但因爲你是在一個交易(巨批)我不認爲這會工作。另外,如果可能的話,應該避免在SQL中使用遊標和WAITFOR。 – StingyJack
您是否嘗試過沒有try/catch塊的完全相同的查詢? – Tombatron
使用RAISERROR('foo',10,1)WITH NOWAIT ::在執行查詢期間,輸出顯示在SSMS中的消息選項卡中。的 – mobill