我有一个存储过程的输出参数,它的值必须从两个内部select语句返回。我有@nTotalRecords
作为我的输出参数,该值将来自下面的select语句我应该如何从别名表TBL
中检索输出参数,在这种情况下,我试着这样做
create procedure [usp_GetMessagesbyReferenceID1]
(
@nRowsPerPage int,
@nPage int,
@nTotalRecords int output
) as
select
TBL.createdate,
TBL.templateid,
@nTotalRecords=TBL.TotalRecords
from
(
select
message.createdate,
message.templateid,
count(1) over() as TotalRecords
from
nts.Messages as [message]
) as TBL
我正在尝试这种方式设置输出参数,但它不起作用它抛出以下错误A SELECT statement that assigns a value to a variable must not be combined with data retrieval operations.
是否有任何可能实现这一点。 ?或者我在语法上犯了任何错误,请帮助我。
注意: 如果只返回一个值(输出参数值),则从select语句中检索输出参数可以正常工作,但我的要求是当我的select语句返回多个值(包括输出参数)时它应该正常工作。
答案 0 :(得分:1)
我已经尝试了很多来征服这一点,但是我已经通过这种方式实现了这一点,我已经写了一个选择语句以获得总记录数。我不确定答案是否完美有效,但它对我来说效果很好。如果还有其他方法,请告诉我。
create procedure [usp_GetMessagesbyReferenceID1]
(
@nRowsPerPage int,
@nPage int,
@nTotalRecords int output
) as
select
TBL.createdate,
TBL.templateid
from
(
select
message.createdate,
message.templateid
from
nts.Messages as [message]
) as TBL
select
@nTotalRecords = count(1)
from
nts.Messages as [message]
答案 1 :(得分:0)
iex(1)> Timex.today |> Timex.format!("{ISOdate}Z")
"2017-03-27Z"
您的代码应该是这样的。删除了Select中的第1列。考虑到内部查询只返回TotalRecords的一个值,这将起作用。如果它返回多个,那么最后一个值将被分配给@nTotalRecords
答案 2 :(得分:0)
根据讨论,下面的代码将帮助您获取TotalRecords(带有单个值的int)和CreatedDate(带有逗号分隔日期值的字符串)。
create procedure [usp_GetMessagesbyReferenceID1]
(
@nRowsPerPage int,
@nPage int,
@nTotalRecords int output,
@CreatedDate varchar(500) output
) as
select @CreatedDate=
STUFF (( SELECT ','+ CAST(T.dates as varchar(15))
FROM nts.Messages T
FOR XML PATH('')),1,1,'')
select @nTotalRecords=TBL.TotalRecords
from
( select dates, count(1) over() as TotalRecords
from nts.Messages
) as TBL