我想从查询中获取sp中的数据并将其设置为变量。 以下是我的查询
WHILE ( ( SELECT COUNT(*) AS [COUNT]
FROM ( SELECT TOP 1 tbl_PurchaseRequisitionOrOrder.AdditionalRefNumberPO
FROM dbo.tbl_PurchaseRequisitionOrOrder
WHERE tbl_PurchaseRequisitionOrOrder.AdditionalRefNumberPO IS NOT NULL
ORDER BY tbl_PurchaseRequisitionOrOrder.PROId DESC
) AS T122
) > 0 )
DECLARE @rr VARCHAR(9)= ( SELECT TOP 1 tbl_PurchaseRequisitionOrOrder.AdditionalRefNumberPO
FROM dbo.tbl_PurchaseRequisitionOrOrder
WHERE tbl_PurchaseRequisitionOrOrder.AdditionalRefNumberPO IS NOT NULL
ORDER BY tbl_PurchaseRequisitionOrOrder.PROId DESC
);
SET @rr= EXEC dbo.GetAddiRefNumberPO @rr
但我得到了 关键字' EXEC'
附近的语法不正确on
SET @rr= EXEC dbo.GetAddiRefNumberPO @rr
我正在使用sql server 2014 请帮助:)
答案 0 :(得分:1)
如果您想将SP中的数据放入变量 - 您需要使用OUTPUT:
ALTER PROCEDURE dbo.GetAddiRefNumberPO
...
@rr VARCHAR(9) OUTPUT
AS
...
然后你就可以使用它:
DECLARE @rr VARCHAR(9);
EXECUTE dbo.GetAddiRefNumberPO ... @rr = @rr OUTPUT
SELECT @rr
在上一次选择中,您将获得从SP执行中获得的值。
主要问题是 - 你正在使用WHILE循环,所以你得到了一些@rr
,然后将它传递给SP并尝试在该变量中写入SP的输出,但是在下一次运行时你会得到另一个{{ 1}}来自您的查询。也许你需要使用另一个变量?这个查询的目的是什么?
答案 1 :(得分:0)
首先,不要在COUNT()
条件下使用IF
。只需使用EXISTS
。
其次,您需要BEGIN
/ END
:
WHILE (. . . )
BEGIN
DECLARE @rr VARCHAR(MAX)= (SELECT TOP 1 o.AdditionalRefNumberPO
FROM dbo.tbl_PurchaseRequisitionOrOrder o
WHERE o.AdditionalRefNumberPO IS NOT NULL
ORDER BY o.PROId DESC);
EXEC dbo.GetAddiRefNumberPO @rr ;
END;
注意:
WHILE
仅声明变量@rr
。 EXEC
是WHILE
循环之后的下一个语句。BEGIN
/ END
来处理任何控制语句,例如WHILE
和IF
。现在你知道了为什么。