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
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