我是存储过程的新手,所以我真的需要一些帮助。我试图修改一个sp来显示所有记录,如果参数为null,如果它不为null,则有另一个查询要运行它。我得到的是错误Procedure of function expects parameter @marketid which was not supplied
。有人可以帮我解决这个问题吗?
ALTER procedure [dbo].[sp_GetProductDetailsForMarket]
@marketid int
as
IF @marketid IS NOT NULL
begin
SELECT
p.ProductID, p.pagenumber,p.ProductName,p.Description,p.CategoryID,
p.ItemNumber,p.Price,p.AlertFrequency,p.PrimaryImageName,
p.DeletionStateCode,p.Published,p.SearchTerms,p.ThumbNailPath,
p.UOMName,p.HCPCCode,
m.marketname,mm.MarketID,
pa.AttributeID,pa.AttributeValueID,pa.Price as AttributePrice,
pa.ImagePath,pa.ProductAttributeAssociationID,pa.IsOptional,
av.[Name] as AttributeValueName,a.[Name] as AttributeName
FROM vPanel_Product p
INNER JOIN vPanel_MarketMappings mm
on p.productid=mm.productid
LEFT JOIN vPanel_Market m
on m.marketid=mm.marketid
LEFT JOIN vPanel_ProductAttributeAssociation pa
on p.productid = pa.productid
and pa.deletionstatecode=0
LEFT JOIN vPanel_Attributes a
on a.AttributeID = pa.AttributeID
and a.deletionstatecode=0
LEFT JOIN vPanel_AttributeValues av
on av.attributeValueID = pa.attributeValueID
and av.deletionstatecode=0
WHERE m.marketid = @marketid
order by p.productname,A.ATTRIBUTEID,AV.ATTRIBUTEVALUEID
end
ELSE
begin
SELECT
p.ProductID, p.pagenumber,p.ProductName,p.Description,p.CategoryID,
p.ItemNumber,p.Price,p.AlertFrequency,p.PrimaryImageName,
p.DeletionStateCode,p.Published,p.SearchTerms,p.ThumbNailPath,
p.UOMName,p.HCPCCode,
pa.AttributeID,pa.AttributeValueID,pa.Price as AttributePrice,
pa.ImagePath,pa.ProductAttributeAssociationID,pa.IsOptional,
av.[Name] as AttributeValueName,a.[Name] as AttributeName
FROM vPanel_Product p
LEFT JOIN vPanel_ProductAttributeAssociation pa
on p.productid = pa.productid
and pa.deletionstatecode=0
LEFT JOIN vPanel_Attributes a
on a.AttributeID = pa.AttributeID
and a.deletionstatecode=0
LEFT JOIN vPanel_AttributeValues av
on av.attributeValueID = pa.attributeValueID
and av.deletionstatecode=0
WHERE @marketid IS NULL
ORDER BY p.productname,A.ATTRIBUTEID,AV.ATTRIBUTEVALUEID
end
答案 0 :(得分:3)
您的问题不在您的存储过程中。您的问题是您的调用应用程序没有传入参数。如果您愿意,可以将其默认为null,如下所示:
ALTER procedure [dbo].[sp_GetProductDetailsForMarket]
@marketid int = NULL
或者,您可以随时将其传入,null或不传入。
答案 1 :(得分:3)
将默认值添加到输入参数,即 NULL
ALTER procedure [dbo].[sp_GetProductDetailsForMarket]
@marketid int = NULL
所以当你打电话给你的存储过程时:
exec sp_GetProductDetailsForMarket
它不会显示错误,因为输入参数 @marketid 的默认值现在设置为 NULL