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

时间:2018-01-14 13:53:36

标签: sql-server batch-file stored-procedures parameter-passing sqlcmd

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

我正在SQL Server中执行以下存储过程:

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查询作为表(这很棒) - 但我没有得到输出参数@responseMessage值。我怎么能得到它?

1 个答案:

答案 0 :(得分:1)

  

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

要在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"