34,590
社区成员
发帖
与我相关
我的任务
分享
--可以解释下这是什么语法吗?
where r.RS_ID=p.IndexField and p.IndexId >='+@PageLowerBound+' AND p.IndexId <='+@PageUpperBound'
--为何不写成:
where r.RS_ID=p.IndexField and p.IndexId >=@PageLowerBound AND p.IndexId <=@PageUpperBound
ALTER PROCEDURE [dbo].[WF_Statistatics_ResourceUseStats]
@startDate datetime,
@endDate datetime,
@resIDs varchar(8000),
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1 -- 页码
AS
declare @strSQL1 varchar(4000) -- 主语句
DECLARE @PageLowerBound varchar(30)
DECLARE @PageUpperBound varchar(30)
SET @PageLowerBound = convert(varchar,@PageSize * @PageIndex)
SET @PageUpperBound = convert(varchar,@PageSize - 1 + @PageLowerBound)
CREATE TABLE #PageIndexTable
(
IndexId int IDENTITY (0, 1) NOT NULL,
IndexField varchar(300)
)
-- Insert into our temp table
set @strSQL1='INSERT INTO #PageIndexTable (IndexField) SELECT rs_id from WF_RS'
exec(@strSQL1)
/*统计全部*/
IF (@ResIDs IS NULL)
BEGIN
SELECT r.RS_ID AS ResID
,r.RS_Name AS ResName
,ISNULL(SearchAmount,0) AS SearchAmount
,ISNULL(TrackAmount,0) AS TrackAmount
,ISNULL(BrowseAmount,0) AS BrowseAmount
,ISNULL(DownloadAmount,0) AS DownloadAmount
,ISNULL(OriRequestAmount,0) AS OriRequestAmount
FROM WF_RS r
left join #PageIndexTable p on 1 = 1
LEFT JOIN /*检索次数*/
(
SELECT COUNT(sl.SearchLogID) AS SearchAmount
, ResID
FROM WF_SearchLog sl
INNER JOIN WF_SearchResLog srl ON sl.SearchLogID = srl.SearchLogID
INNER JOIN WF_SearchRes sr ON srl.SearchResID = sr.SearchResID
WHERE (sl.SearchDateStamp BETWEEN @startDate AND @endDate)
GROUP BY ResID
) s ON r.RS_ID = s.ResID
LEFT JOIN /*点击量*/
(
SELECT COUNT(RESID) AS TrackAmount
,ResID
FROM ResTrackLog
WHERE (TrackDate BETWEEN @startDate AND @endDate)
GROUP BY ResID
) tl ON r.RS_ID = tl.ResID
LEFT JOIN /*浏览次数*/
(
SELECT COUNT(*) BrowseAmount, RS_ID
FROM WF_Browse_log
WHERE Browse_Time BETWEEN @startDate AND @endDate
GROUP BY RS_ID
) B ON r.RS_ID = B.RS_ID
LEFT JOIN /*下载次数*/
(
SELECT COUNT(ResID) DownloadAmount, ResID
FROM ResDownloadLog
WHERE DownloadDate BETWEEN @startDate AND @endDate
GROUP BY ResID
) D ON r.RS_ID = D.ResID
LEFT JOIN /*消费金额*/
(
SELECT SUM(OrderMoney) AS OriRequestAmount
, ResID
FROM WF_OrderDtl
GROUP BY ResID
) O ON r.RS_ID = o.ResID
where r.RS_ID=p.IndexField and p.IndexId >='+@PageLowerBound+' AND p.IndexId <='+@PageUpperBound'
ORDER BY ResName
END
ELSE
BEGIN
SELECT r.RS_ID AS ResID
,r.RS_Name AS ResName
,ISNULL(SearchAmount,0) AS SearchAmount
,ISNULL(TrackAmount,0) AS TrackAmount
,ISNULL(BrowseAmount,0) AS BrowseAmount
,ISNULL(DownloadAmount,0) AS DownloadAmount
,ISNULL(OriRequestAmount,0) AS OriRequestAmount
FROM WF_RS r left join #PageIndexTable p on 1 = 1
INNER JOIN UDF_iter_charlist_to_table(@ResIDs,default) ids ON r.RS_ID = ids.nstr
LEFT JOIN /*检索次数*/
(
SELECT COUNT(sl.SearchLogID) AS SearchAmount
, ResID
FROM WF_SearchLog sl
INNER JOIN WF_SearchResLog srl ON sl.SearchLogID = srl.SearchLogID
INNER JOIN WF_SearchRes sr ON srl.SearchResID = sr.SearchResID
WHERE (sl.SearchDateStamp BETWEEN @startDate AND @endDate)
GROUP BY ResID
) s ON r.RS_ID = s.ResID
LEFT JOIN /*点击量*/
(
SELECT COUNT(RESID) AS TrackAmount
,ResID
FROM ResTrackLog
WHERE (TrackDate BETWEEN @startDate AND @endDate)
GROUP BY ResID
) tl ON r.RS_ID = tl.ResID
LEFT JOIN /*浏览次数*/
(
SELECT COUNT(*) BrowseAmount, RS_ID
FROM WF_Browse_log
WHERE Browse_Time BETWEEN @startDate AND @endDate
GROUP BY RS_ID
) B ON r.RS_ID = B.RS_ID
LEFT JOIN /*下载次数*/
(
SELECT COUNT(ResID) DownloadAmount, ResID
FROM ResDownloadLog
WHERE DownloadDate BETWEEN @startDate AND @endDate
GROUP BY ResID
) D ON r.RS_ID = D.ResID
LEFT JOIN /*消费金额*/
(
SELECT SUM(OrderMoney) AS OriRequestAmount
, ResID
FROM WF_OrderDtl
GROUP BY ResID
) O ON r.RS_ID = o.ResID
WHERE r.State=1 AND r.Enable=1
ORDER BY ResName
END
我在2005中是这样运行的:
DECLARE @return_value int
EXEC @return_value = [dbo].[WF_Statistatics_ResourceUseStats]
@startDate = N'2008-02-02',
@endDate = N'2009-04-02',
@resIDs = NULL,
@PageSize = 10,
@PageIndex = 1
SELECT 'Return Value' = @return_value
GO