SQL Server 存储过程的打印问题

问题描述

我有一个问题,如果从链接服务器调用存储过程,我将收到反向序列消息。如果有人知道根本原因或提供解决方案,我将不胜感激。提前致谢。

这是我的测试代码

CREATE PROCEDURE [dbo].[TestSP]
AS
BEGIN
    SET NOCOUNT ON;

    PRINT '1'
    PRINT '2'
    PRINT '3'
END

这样称呼:

EXEC [dbo].[TestSP] (call by local)

输出

1
2
3

如果由另一个链接服务器执行,它将以相反的顺序显示输出

例如

EXEC [XXX.XXX.XXX.XXX].[dbo].[TestSP]

输出

3
2
1

解决方法

打印是一个调试命令而不是一个功能命令。如果您希望序列的顺序一致,则必须在 10 级使用带有关键字 NOWAIT 的 RAISERROR。

CREATE PROCEDURE [dbo].[TestSP]
AS
BEGIN
    SET NOCOUNT ON;
    RAISERROR('1',10,1) WITH NOWAIT;
    RAISERROR('2',1) WITH NOWAIT;
    RAISERROR('3',1) WITH NOWAIT;
END