【问题标题】:SQLCMD with Stored Procedure via batch file - get an output parameter通过批处理文件使用存储过程的 SQLCMD - 获取输出参数
【发布时间】:2018-06-23 07:59:14
【问题描述】:

我尝试通过批处理文件从使用 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"     

结果我将选择查询作为一个表(这很棒) - 但我没有得到输出参数 @responseMessage 值。我怎样才能得到它?

【问题讨论】:

  • 你所有的SELECT 都坏了:首先,他们缺少一个FROM 子句来定义从哪个表读取,IF EXISTS() 里面的SELECT 是错误的,因为你有两次SELECT 你只需要一次.....
  • 修复了 FROM 子句,但我认为这与问题无关......除非我完全不在。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2013-01-11
    • 2015-03-05
    • 2021-08-28
    • 2019-11-13
    相关资源
    最近更新 更多