【发布时间】: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