问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

帮忙解释下这条存储过程,详细详细

发布网友 发布时间:2022-04-15 03:50

我来回答

3个回答

懂视网 时间:2022-04-15 08:11

自己之前一直是使用的通用的存储过程 ,也是封装好的只要传表名 然后 条件 等等 来到新环境 让自己写一个存储过程, 没办法 自己就需要写一个咯 之前写的比较多的是 按 top 来分页 现在公司要求是使用Row_number 当然 后者效率还是高一点 。至于索引什么的

自己之前一直是使用的通用的存储过程 ,也是封装好的只要传表名 然后 条件 等等
来到新环境 让自己写一个存储过程, 没办法 自己就需要写一个咯 之前写的比较多的是 按 top 来分页 现在公司要求是使用Row_number 当然 后者效率还是高一点 。至于索引什么的 暂时还没有用到 (有什么需求 现学也是可以的)其中也有 with(nolock) 但是会容易造成数据脏读。如果你有用到索引 或者你想看到你的语句查询开销 你可以使用(ctrl+M)键调出来。至于你看到这些占用啥的 懵了? 那就请你移驾 自行查找(我也不会你信吗?)

 USE [JHMinGameDB]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: yanyunhai
-- Create date: 2016-04-13
-- Description: 新手送豆
-- =============================================
CREATE PROCEDURE [dbo].[Web_Active_Buyu_CardLog_page] --创建该存储过程名字(如已经存在 要改的时候就把 create 变成 Alter)
@State int, 
@startTime datetime,
@endTime datetime,
@pageSize int, 
@pageIndex int, 
@recd int output,--
输出参数 @totalpeas int output --输出参数 AS set @recd=0 --赋值为0是避免查询结果为0 时 显示为null set @totalpeas=0 Declare @recdst int=0,@recdend int=0 --@recdst起始条数 Set @recdst=@pageSize * (@pageIndex-1)+1 -- @recdend 结束条数 Set @recdend=@pageSize + @recdst-1 BEGIN --在对于时间判断时建议 少用 between and 因为 0:00-23:59 declare @SumNum1 int,@SumNum2 int,@SumNum3 int select @SumNum1=COUNT(*) from Active_CardLog with(nolock) where [State]=0 select @SumNum2=COUNT(*) from Active_CardLog with(nolock) where [State]=1 select @SumNum3=COUNT(*) from Active_CardLog with(nolock) where [State]=1 and UpTime>=@startTime and UpTime<@endTime if @State>=0 begin select row_number() over(order by UpTime desc) as rowid,a.id,CardID, CardPwd, CardNum, State, UserID, IP, UpTime, CreateTime,b.myname into #tmp from Active_CardLog a left join JH_member b on b.idx=a.UserID where State=@State --and UpTime>=@startTime and UpTime<@endTime select @totalpeas=isnull(SUM(CardNum),0),@recd=count(1) from #tmp select rowid,CardID, CardPwd, CardNum, State, UserID, IP, UpTime, CreateTime,myname,@totalpeas sumnum,@recd sumRowID,@SumNum1 SumNum1,@SumNum2 SumNum2,@SumNum3 SumNum3 from #tmp where rowid between @recdst and @recdend --根据rowid 来确定显示区间 drop table #tmp end else if @State<0 begin select row_number() over(order by UpTime desc) as rowid,a.id,CardID, CardPwd, CardNum, State, UserID, IP, UpTime, CreateTime,b.myname into #temp from Active_CardLog a left join JH_member b on b.idx=a.UserID where UpTime>=@startTime and UpTime<@endTime select @totalpeas=isnull(SUM(CardNum),0),@recd=count(1) from #temp where rowid between @recdst and @recdend --根据rowid 来确定显示区间 drop table #temp end END - -其实上问可以用不用判断也可以解决这个问题 那就是用 where(([State]=2)or([State]=@state)) - -有人在使用时 会出现 Rowid 报错?自己找找子查询 GO

这里写图片描述
——————– with (nolock)—-数据多的时候可以《索引之后的选择》—————–
使用情况: 当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能。
不过有一点千万要注意的就是,WITH (NOLOCK)的SQL SELECT有可能会造成数据脏读。
用法:select * from table with(nolock) left join table with(nolock) 表名后面接上 with (nolock)
注意事项:①也就是说当使用NoLock时,它允许阅读那些已经修改但是还没有交易完成的数据。因此如果有需要考虑transaction事务数据的实时完整性时,使用WITH (NOLOCK)就要好好考虑一下
②:with(nolock)的写法非常容易再指定索引。
跨服务器查询语句时 不能用with (nolock) 只能用nolock
同一个服务器查询时 则with (nolock)和nolock都可以用
比如:
select * from [IP].a.dbo.table1 with (nolock) 这样会提示用错误
select * from a.dbo.table1 with (nolock) 这样就可以
当然 你也可以看看 over() 开窗函数

其中的一些东西也是看前一任 程序员写的, 然后就有在园子里面看看介绍。 自己摘了一部分 因为看别人的东西的时候也没有做到用怀疑的态度去看 去分析 所以贴出来 。如果你看到以后有错误 有误区 欢迎指正!!
对你的能力是一次证明, 对我是一次帮助。 虚心求学。

热心网友 时间:2022-04-15 05:19

-- 创建一个名称为 GetPagedMovies 的存储过程
create procere dbo.GetPagedMovies
(
-- 定义2个参数 名称分别为 @startRowIndex 与 @maximumRows 数据类型为 INT (整数类型)
@startRowIndex int,
@maximumRows int
)
as

-- 定义一个 CTE ( Common Table Express )
-- 名称为 OrderedMovies
with OrderedMovies as
(
-- 从 Movies 表检索 id 列的数据.
-- 其中 ROW_NUMBER() over (order by id) 是 按照 id 从小到大排序编号
select
id,ROW_NUMBER() over (order by id) as RowNumber
from
Movies
)

-- 从前面的 OrderedMovies CTE 与 OrderedMovies 进行关联的检索.
-- 关联条件是 id 相等.
-- 检索的内容是 行号,以及Movies表的 id,title,director字段
-- 检索的条件是 行号 在 参数中的 (@startRowIndex +1) 到 (@startRowIndex + +@maximumRows +1) 之间。
select
OrderedMovies .RowNumber,Movies.id,Movies.title,Movies.director
from
OrderedMovies
join Movies
on OrderedMovies.id=Movies.id
where
RowNumber between (@startRowIndex +1) and (@startRowIndex + +@maximumRows +1)

注:这里的 @startRowIndex + +@maximumRows +1 有点奇怪 可能是中间多了一个 + 号

热心网友 时间:2022-04-15 06:37

这个是SQL Server 2005 以上版本的存储过程,使用了其增强功能CTE(一种临时表,有ROW_NUMBER() 函数)技术。
利用SQL Server 2005 T-SQL的新增“with CTE表名()”指令,创建临时表,取得某几行的数据。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 淘宝买东西查不到物流,卖家不理人怎么投诉 淘宝一直没有物流信息可以投诉商家码 怎么投诉淘宝商家和物流 推荐一些好听的歌~~ 给我哦推荐几首好听的歌曲 给狗狗吃了煮玉米,还不到四个小时就把玉米原模原样的拉出来了,怎么办? 为什么我每次吃玉米,隔天排便的时候就会把玉米的原形排出来,是不是消化不好? 宝宝吃玉米为什么拉出来玉米 为什么我吃了玉米,拉出来的是玉米?还有上次吃了枸杞,拉出来的是枸杞? 我吃的玉米鲜肉饺子,今天拉出来玉米居然没消化还是完整的, 一台电脑可以同时登几个 为什么吃下去的玉米,拉出来还是原来的形状? 吃完玉米好几天大便都有玉米 为什么吃玉米拉出来还是玉米 为什么吃玉米拉出来也是玉米 使用存储过程查询出来的数据。 电脑怎么登录两个 存储过程中怎么使用row 童年和昆虫记的读书卡 低压用户线路闪断一秒后来电? 怎么看苹果主板板号? 查苹果6s有没被维修人换主板怎么查 capm均衡模型缺点 资产定价模型CAPM计算结果与实际不符的原因 请教一题CAPM的问题 收购一家企业做资产评估时,考虑到企业原有人力,市场等无形的资产因素,收购价格应该怎样计算最合理最划算 CAPM公式里面的Beta值是整个股票市场是一样的,还是说一个公司一个Beta值? ps4手柄zc12na啥意思 ps4手柄是jds还是JDM ps4二代手柄重量 ps4二代手柄重量 ps4手柄螺丝刀型号 ps4手柄螺丝刀型号 ps4手柄支持创维电视吗+型号是55G650 ps4手柄支持创维电视吗+型号是55G650 怎么不让老师看见钉钉上的作业时间段? ...让钉钉直播后台运作,老师可以看到实际观看时间吗? Row_Number结合between查询数据 作文月亮请我做客怎么写 在杭州java培训哪里好?