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 日志和查询消息
错误不在 SQL 日志中,而是显示在查询消息中。
我认为您不能GO 5000000
与局部变量一起使用,至少在我的尝试中,每次重新声明时它都会重置。
如何在 while 循环中实时显示局部变量?
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)
归档时间: |
|
查看次数: |
78 次 |
最近记录: |