【发布时间】:2018-01-31 03:57:06
【问题描述】:
我创建了一个返回特定值的存储过程,但我无法将存储过程的返回值存储在标量变量中。
我收到了这个错误
消息 102,第 15 级,状态 1,第 2 行
'2014-03-01' 附近的语法不正确。
这是我的存储过程:
ALTER PROCEDURE SP_generatePaymentID
@date nvarchar(50),
@trainer nvarchar(50)
AS
BEGIN
DECLARE @result as int
DECLARE @paymentid as int
SET @date='2017-08-22'
SET @result = (SELECT COUNT(*) FROM finalinstructoreexpense
WHERE date = @date AND trainer = '@trainer')
IF (@result = 0)
BEGIN
SET @paymentid = (SELECT REPLACE(CONVERT(CHAR(10), @date, 103), '-', ''))
SELECT CAST(@paymentid AS NVARCHAR(MAX)) + '001'
END
ELSE
BEGIN
SET @paymentid = (SELECT TOP 1 paymentid
FROM finalinstructoreexpense
WHERE date = @date AND trainer = '@trainer'
ORDER BY paymentid DESC)
SELECT @paymentid + 1
END
RETURN @paymentid
END
当我执行程序时
exec SP_generatePaymentID '2014-03-01','Benzir Pinjari'
这是在我的结果窗口中显示记录 (20170822001)。
这是我的结果
但是当我尝试像这样将值存储在我的标量变量中时
declare @paymentID as int
set @paymentID = SP_generatePaymentID '2014-03-01','Benzir Pinjari'
select @paymentID
报错了
消息 102,第 15 级,状态 1,第 2 行
'2014-03-01' 附近的语法不正确。
这里有什么问题?我需要做什么才能将输出值存储在我的标量变量中?
【问题讨论】:
-
为什么要传入一个名为 date 的变量,它实际上是一个 varchar,然后将其设置为硬编码值?日期应该是日期,而不是字符串。为什么要在这里麻烦一个参数?我建议在您的代码中添加一些格式,因为这看起来很痛苦。您还可以将参数 @trainer 作为字符串文字,而不是参数。
-
@SeanLange 这只是 stackoverflow 的一个测试示例,我有一个更大的程序
-
因此您发布了一条错误消息,并希望有人能够破译一些未生成该消息的代码,并告诉您真实代码中的问题所在。你怎么指望有人这样做。您在此处发布的伪代码是一团糟。
标签: sql-server stored-procedures return scalar