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