通过批处理文件使用存储过程的 SQLCMD - 获取输出参数

SQLCMD with Stored Procedure via batch file - get an output parameter

我尝试通过批处理文件从使用 sqlcmd 执行的存储过程中获取输出参数。详情:

我正在 SQL 服务器中执行以下存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[uspCalibFail]
    @pStation_Name NVARCHAR(50),
    @responseMessage NVARCHAR(250) = '' OUTPUT
AS
BEGIN
    SET NOCOUNT ON

    SELECT [Station], [TLI], [Description]
    FROM CalibData
    WHERE Waiver_expiration_dat < GETDATE()

    IF EXISTS (SELECT TOP 1 SELECT [Station], [TLI], [Description] 
       FROM CalibData
       WHERE Waiver_expiration_dat < GETDATE()  
    BEGIN
        SET @responseMessage = 'Station devices overdue for calibration'
    END
    ELSE
        SET @responseMessage='Station OK'
END
GO

我正在使用批处理文件来执行存储过程,我使用批处理文件参数并将其作为存储过程输入输入

sqlcmd -S NEMICQS-DB64 -U ***** -P ***** -Q "exec [NewDB].[dbo].[uspCalibData] @pStation_Name=$(station)" /v station="%~1"     

作为结果,我得到 select 查询作为 table(这很好)- 但我没有得到输出参数 @responseMessage 值。我怎样才能得到它?

I'm using a batch file to execute the stored procedure, I use a batchfile parameter and enter it as the stored procedure input.

要在 T-SQL 脚本中捕获存储过程输出参数,您需要声明一个局部变量并将其指定为存储过程输出参数值。未经测试的示例片段:

-Q "DECLARE @vresponse_message nvarchar(250); exec [NewDB].[dbo].[uspCalibData] @pStation_Name=$(station),@presponse_message=@vresponse_message OUTPUT;SELECT @vresponse_message AS vresponse_message;" /v station="%~1"