Vai*_*hav 2 sql t-sql sql-server-2008-r2
我已经尝试了以下两个查询,并且它们同时执行.但我仍然看到在许多存储过程中使用的RaiseError而不是print.
查询1:
BEGIN
WAITFOR DELAY '00:00:03.00'
PRINT 'DELAY 1 HAS ENDED'
WAITFOR DELAY '00:00:03.00'
PRINT 'DELAY 2 HAS ENDED'
END
Run Code Online (Sandbox Code Playgroud)
查询2:
BEGIN
WAITFOR DELAY '00:00:03.00'
RAISERROR ('DELAY 1 HAS ENDED', 10,1) WITH NOWAIT
WAITFOR DELAY '00:00:03.00'
RAISERROR ('DELAY 2 HAS ENDED', 10,1) WITH NOWAIT
END
Run Code Online (Sandbox Code Playgroud)
两者都在6秒后才提供所需的输出(我在SQL Server 2008 R2中检查了这一点)
RAISERROR优于PRINT的优点是您可以在消息中嵌入变量值,而无需担心CAST和CONVERT.例如:
BEGIN
DECLARE @m int=0
WAITFOR DELAY '00:00:01.00'
SET @m+=1;
RAISERROR ('DELAY %d HAS ENDED', 10,1, @m)
WAITFOR DELAY '00:00:01.00'
SET @m+=1;
RAISERROR ('DELAY %d HAS ENDED', 10,1, @m)
END
Run Code Online (Sandbox Code Playgroud)
将产生与上述两个示例相同的输出,但在消息中插入变量的值.使用PRINT,你必须做:
PRINT 'DELAY ' + CONVERT(VARCHAR(5),@m) + ' HAS ENDED'
Run Code Online (Sandbox Code Playgroud)
......这可能但很麻烦......
我的服务器版本与您相同,查询 2 在 3 秒后打印第一个结果(如预期)。您必须在 Microsoft SQL Server Management Studio 中自行切换到“消息”选项卡才能查看该消息。