【发布时间】:2017-05-25 14:30:17
【问题描述】:
我确信解决方案非常简单,但我一直在得到一个
SqlException:过程或函数需要未提供的参数
错误。我不是 SQL 向导,但对我来说参数看起来还不错。我确实更改了参数并且没有收到此错误,但是当我一直开始收到它时,我将存储过程恢复到我知道事实很好但仍然收到它的原始版本。
我尝试像这样执行存储过程
EXECUTE [dbo].[BHS_CloseCnt_Print_PackList] @palletid = '562992'
填充了一个变量。这个存储过程调用一个函数来确定订单的状态,如果我插入的变量并用这个方法检查符合函数的标准,我就会得到预期的回报。
如果容器不满足功能标准,我会得到一个我认为没问题的 null。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[BHS_CloseCnt_Print_PackList]
(@PalletId numeric)
AS
BEGIN
Declare @PO as nvarchar(50)
Declare @Internal_Shipment_Num as numeric
Declare @Internal_Shipment_Line_Num as numeric
select top 1
@Internal_Shipment_Num = sc.INTERNAL_SHIPMENT_NUM,
@Internal_Shipment_Line_Num = sc.INTERNAL_SHIPMENT_LINE_NUM
from
SHIPPING_CONTAINER sc
where
INTERNAL_CONTAINER_NUM = @PalletId
or PARENT = @PalletId
and INTERNAL_SHIPMENT_LINE_NUM is not null
select @PO = dbo.fn_BHS_AllPOPLTS_CLOSED(@PalletId, @Internal_Shipment_Num, @Internal_Shipment_Line_Num)
print @PO
if @PO is not null
Begin
select @PalletId 'INTERNAL_CONTAINER_NUM', '60' 'DOCUMENT_TYPE'
End
End
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fn_BHS_AllPOPLTS_CLOSED]
(@palletId numeric,
@Internal_Shipment_Num numeric,
@Internal_Shipment_Line_Num numeric)
RETURNS nvarchar(50)
AS
BEGIN
Declare @PO nvarchar(50)
Declare @OPENPO nvarchar(50)
Declare @IntShip as numeric
select @PO = isnull(sd.CUSTOMER_PO, 'FEIT')
from SHIPMENT_DETAIL sd
where sd.INTERNAL_SHIPMENT_LINE_NUM = @Internal_Shipment_Line_Num
and sd.internal_shipment_num = @Internal_Shipment_Num
select @OPENPO = isnull(sd.CUSTOMER_PO, '')
from shipping_container sc
join SHIPMENT_DETAIL sd on sd.INTERNAL_SHIPMENT_LINE_NUM = sc.INTERNAL_SHIPMENT_LINE_NUM
where sd.CUSTOMER_PO = @PO and sc.INTERNAL_SHIPMENT_NUM = @Internal_Shipment_Num
and sc.status < 600
if(isnull(@OPENPO, '') != '')
Begin
set @PO = null
End
return @PO
End
【问题讨论】:
-
fn_BHS_AllPOPLTS_CLOSED 的代码怎么样?需要多少个参数,能分享一下代码吗?您提供的 EXECUTE 语句似乎有效,那么它可能是函数吗?
-
Nemanja,我刚刚修改为包含函数脚本。我确实尝试向函数添加一个参数并将其用作 SP 的新参数,但是当我开始收到错误时,我将两个都恢复到以前已知的工作版本,但仍然收到错误。
-
好的,我刚刚运行了你的代码,它可以工作,所以我无法重现这个问题。如果我理解正确,您是说此代码适用于工作版本,但由于您同时撤消的更改,您仍然会收到错误消息。如果是这样,那么您可能会收到错误,因为正在执行旧版本的函数或 SP。也许看看stackoverflow.com/questions/22721306/…上的建议
-
就是这样。我按照其中一个响应中的建议运行了 DBCC FREEPROCCACHE 以清除缓存,并且能够成功运行 SP,并且没有出现预期的错误,谢谢!!!
-
太棒了。将其发布为答案并接受它,以便帮助其他人。
标签: sql-server stored-procedures ssms