在while循环中显示局部变量

Jam*_*ins 4 sql-server sql-server-2017

我有一个运行数天的 while 循环(bydesign)请参阅相关是否有限制可以将多少个备份附加到单个文件?

我有一个显示循环计数的局部变量,当我在查询窗口中运行它时,我可以用 print @counter

我现在正在作业中运行 while 循环,并且我想显示该@counter值。经过一番研究,我尝试了RAISERROR (Transact-SQL),它应该显示在 SQL 错误日志中,但它不起作用。我读了Using RAISERROR我认为我的代码是正确的,但不确定它是否可以在带有局部变量的 While 循环中使用。

创建数据库并准备它

USE [master]
GO
Create database T_test

USE [master]
GO
ALTER DATABASE [T_test] SET RECOVERY FULL WITH NO_WAIT
GO

BACKUP DATABASE T_test to disk= N'K:\Test\T_test.bak' with noinit --Create first full
GO
Run Code Online (Sandbox Code Playgroud)

尝试在查询窗口中运行以进行测试

DECLARE @counter int
SET @counter = 0
WHILE 1=1
BEGIN 
BACKUP DATABASE [T_test] TO  
DISK = N'K:\Test\T_Test.diff' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  
NAME = N'T_Test-Diff Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION
SET @counter = @counter + 1;
RAISERROR(N'Count equals :%d', 16, 1, @counter );
print @counter 
END
Run Code Online (Sandbox Code Playgroud)

几个循环后停止并检查 SQL 日志和查询消息

T_Test 点阵 jpeg

错误不在 SQL 日志中,而是显示在查询消息中。

我认为您不能GO 5000000与局部变量一起使用,至少在我的尝试中,每次重新声明时它都会重置。

如何在 while 循环中实时显示局部变量?

Eri*_*ing 8

RAISERROR 的两个扩展可能会有所帮助:

将其写入错误日志:

DECLARE @msg NVARCHAR(1000) = N''
RAISERROR(@msg, 16, 1) WITH LOG;
Run Code Online (Sandbox Code Playgroud)

要“实时”在消息选项卡中显示它:

DECLARE @msg NVARCHAR(1000) = N''
RAISERROR(@msg, 16, 1) WITH NOWAIT;
Run Code Online (Sandbox Code Playgroud)