SQL Server积累

本文介绍了SQL Server中的一些高效查询技巧,包括高效分页、递归查询、去除一对多重复项的方法,以及时间间隔的处理。同时,讨论了ORDER BY在特定场景的限制,多表更新的操作,获取七天前的日期,LEFT JOIN的行为,如何创建表变量,数据连接成字符串的技巧,判断当天数据的方法,以及执行存储过程传参的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、高效分页

select * from
(select *,row_number() over(order by id desc) rownum from table)tem 
where tem.rownum>(@pageCurrent-1)*@pageSize and rownum<=@pageCurrent*@pageSize

2、递归查询

with cpt as
(
  select id from table where id=1
  union all
  select c.id from table c inner join cpt on c.pid=cpt.id
 )
select * from cpt
3、系统操作

select name from sysobjects where xtype='TR' --所有触发器
select name from sysobjects where xtype='P' --所有存储过程
select name from sysobjects where xtype='V' --所有视图
select name from sysobjects where xtype='U' --所有表

4、去除一对多重复项

select max(ColorID) From base_Color_View where ProductID IN(12,13) Group by ProductID

5、时间间隔

DateDiff(s,InputTime,getdate())>2*24*60*60 --大于两天

6、除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

select * from
(
  select top 100 percent * from tab where ID>20 order by userID desc  --tab 是视图
) as a order by date desc

7、update 多表更新

update a set a.discout=b.discount from a,b where a.id=b.id

8、获取七天前的此时此刻

select getdate()-7

9、left、right join的时候,会把left的数据全部拿出来,内部条件无效

SELECT b.ImageID, g.ImageGroupID FROM  base_ImageGroup AS g LEFT OUTER JOIN base_Image AS b 
ON g.ImageGroupID = b.ImageGroupID and g.del=0  AND b.Del = 0 --这里面g.del=0是无效的


9、创建表变量

declare @tb table 
(
   id int
)
insert into @tb select id from tb 

10、把数据连接成字符串

--stuff()、for xml path
select stuff((select ','+col from tb for xml path('')),1,1,'')--1,2,3,4


11、判断是否当天的数据

DateDiff(dd,'数据时间',getdate())=0

12、执行存储过程传参只能是已赋值的变量

EXEC '存储过程' GETDATE(),GETDATE()--错误
DECLARE @NowTime DATETIME
SET @NowTime=GETDATE()
EXEC '存储过程' @NowTime,@NowTime--正确




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值