我有一个问题:
DECLARE @date date = '2017-09-13'
DECLARE @pos int = 111222
DECLARE @UserNo int = 122425
DECLARE @sameDist bit = 0
DECLARE @brandId int = NULL
DECLARE @sameArea bit = 0
SELECT
PosId, SUM(NetSales) as SumSales,
ROW_NUMBER() OVER(ORDER BY SUM(NetSales) DESC) as RowID
FROM
dbo.t_Sales_Daily
INNER JOIN
dbo.t_Pos ON dbo.t_Sales_Daily.PosId = dbo.t_Pos.Id
INNER JOIN
t_User ON dbo.t_Sales_Daily.RetailerNo = t_User.UserNo
WHERE
(CONVERT(DATE, SalesDate) = @date
AND (@brandId IS NULL OR BrandId = @brandId)
AND (@sameDist = 0 OR dbo.t_Pos.DistType = (SELECT TOP 1 DistType
FROM t_Pos WHERE Id = @pos))
AND (@sameArea = 0 OR t_User.RegionName = (SELECT top 1 RegionName
FROM t_User WHERE UserNo = @userNo)))
GROUP BY
PosId
当我使用声明的参数运行此查询时,我得到大约~2000行,但是当我将此查询插入存储过程并运行存储过程时,我只得到大约200行。
查询完全相同,我三重检查查询是否相同,并且传递了相同的参数。
以下是我执行存储过程的方法:
exec dbo.GetPosRankDaily @userNo, @date, @pos, NULL, NULL, NULL
正如我所说,存储过程确实有效,但只返回较少的结果(我使用set nocount on
),从存储过程返回的所有结果都包含在查询中。
答案 0 :(得分:0)
好的,我在发布问题后1秒钟找到了解决方案...
虽然在存储过程中我声明了2位参数,默认值为0,但我在参数中传递了null而不是0,并且它以某种方式产生的结果较少,这很奇怪,因为它不应该返回任何内容。
所以基本上运行sp就解决了这个问题:
exec dbo.GetPosRankDaily @userNo,@date,@pos,NULL,0,0