如何解决Select语句从存储过程返回值
我正在编写一个带有以下参数的存储过程:
CREATE PROCEDURE spDaterange
@InvNo varchar(50) OUTPUT,@InvDt date OUTPUT,@InvDueDt date OUTPUT,@InvTot money OUTPUT,@InvBal money OUTPUT,@minDate varchar(30) = NULL,@maxDate varchar(30) = NULL
AS...
验证后,我尝试对结果集执行以下选择:
SELECT
@InvNo,@InvDt,@InvDueDt,@InvTot,(Invoicetotal - CreditTotal - PaymentTotal) AS @InvBal --Syntax ERROR
FROM
Invoices
WHERE
InvoiceDate >= @minDate
AND InvoiceDate <= @maxDate
ORDER BY
InvoiceDate;
我想计算到期余额并将其与符合条件的表中的列一起传回。
另外,这些参数的返回是否隐含?我没有使用返回值(整数)。
解决方法
您的语法有缺陷,您没有为变量分配任何值(大概是您想返回),您需要指定 top 1
例如
SELECT top 1
@InvNo=InvNo,@InvDt=InvDt,@InvDueDt=InvDueDt,@InvTot=InvTot,@InvBal=(InvoiceTotal - CreditTotal - PaymentTotal)
FROM
Invoices
WHERE
InvoiceDate >= @minDate
AND InvoiceDate <= @maxDate
ORDER BY
InvoiceDate;
变量一旦赋值,将返回给调用过程(参数上也需要输出子句)
,使用日期类型参数。不要对日期使用字符类型。
返回列值,而不是变量
别名 (AS) 不能是变量
在 @minDate 和 @maxDate 的 where 中测试 NULL,因为您正在使用 可选参数
CREATE PROCEDURE spDateRange
@minDate DATETIME2(0) = NULL,@maxDate DATETIME2(0) = NULL
AS
BEGIN
SELECT
i.InvNo,i.InvDt,i.InvDueDt,i.InvTot,InvoiceTotal - CreditTotal - PaymentTotal AS InvBal
FROM Invoices i
WHERE
(@minDate IS NULL OR InvoiceDate >= @minDate)
AND (@maxDate IS NULL OR InvoiceDate <= @maxDate)
ORDER BY InvDate
END
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。