数据库使用技巧

本文提供了一系列SQL实用技巧,包括硬盘分区查询、表数据一致性检查、事件探察器进程关闭、特定范围记录检索及数据库用户表获取等操作。适用于日常数据库管理和维护工作。

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

4.查看硬盘分区:
EXEC master..xp_fixeddrives

5.比较A,B表是否相等:
IF (SELECT checksum_agg(binary_checksum(*)) FROM A)
=
(SELECT checksum_agg(binary_checksum(*)) FROM B)
print '相等'
ELSE
print '不相等'

6.杀掉所有的事件探察器进程:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'

7.记录搜索:
开头到N条记录
SELECT Top N * FROM 表
-------------------------------
N到M条记录(要有主索引ID)
SELECT Top M-N * FROM 表 WHERE ID IN (SELECT Top M ID FROM 表) ORDER BY ID DESC
----------------------------------
N到结尾记录
SELECT Top N * FROM 表 ORDER BY ID DESC
案例
例如1:一张表有一万多条记录,表的第一个字段 RecID 是自增长字段, 写一个SQL语句, 找出表的第31到第40个记录。

SELECT top 10 recid FROM A WHERE recid NOT IN(SELECT top 30 recid FROM A)

分析:如果这样写会产生某些问题,如果recid在表中存在逻辑索引。

SELECT top 10 recid FROM A WHERE……是从索引中查找,而后面的SELECT top 30 recid FROM A则在数据表中查找,这样由于索引中的顺序有可能和数据表中的不一致,这样就导致查询到的不是本来的欲得到的数据。

解决方案

1, 用ORDER BY SELECT top 30 recid FROM A ORDER BY ricid 如果该字段不是自增长,就会出现问题

2, 在那个子查询中也加条件:SELECT top 30 recid FROM A WHERE recid>-1

例2:查询表中的最后以条记录,并不知道这个表共有多少数据,以及表结构。
SET @s = 'select top 1 * from T where pid not in (select top ' + str(@count-1) + ' pid from T)'

print @s exec sp_executesql @s

9:获取当前数据库中的所有用户表
SELECT Name FROM sysobjects WHERE xtype='u' AND status>=0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值