2013-05-20 26 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

回答