整理的一些T-sql(二)

本文介绍了一个用于自动生成编号的存储过程,并提供了多种实用的SQL Server数据库管理技巧,包括数据库查询优化、存储过程管理、数据库修复等。
None.gif这个存储过程的作用是自动生成编号,比如我们在数据库中有个**票编号字段,该存储过程可以生成格式为头(自己定义的一个头,比如AA)+日期(形如20070401)+6位递增整数(形如002254),并且每到了新的一年后面的6位整数便会归0重新开始。其中用到了动态执行sql的方法。参数有四个,需要给出表名称,字段名称,头和一个返回值。
None.gif=============================================
None.gif
-- Author:        <vagerent>
None.gif--
 Create date: <2006-12-14>
None.gif--
 Description:    <获取编码,形如HEAD20060512000001;(头+日期+6位整数)后面为六位,每新的一年编号重新
None.gif

None.gif归0
>
None.gif
-- =============================================
None.gif
Create PROCEDURE [dbo].[mp_GetPKNo]
None.gif    
@sTableName varchar(50),
None.gif    
@sFieldName varchar(50),--目标字段
None.gif
    @sHead varchar(50),--前缀,如Head等
None.gif
    @sPK varchar(50) out --输出
None.gif

None.gif
AS
None.gif
BEGIN
None.gif    
declare @dToday datetime,@sToday varchar(10),
None.gif        
@sYear varchar(10),@sSubID varchar(20),@sSql nvarchar(1000);--动态sql一定要用
None.gif

None.gif
nvarchar!!!
None.gif    
None.gif    
set @dToday = getdate();
None.gif    
set @sToday = Convert(varchar,Year(@dToday))
None.gif        
+SubString(Convert(varchar,Month(@dToday)+100),2,2)
None.gif        
+SubString(Convert(varchar,Day(@dToday)+100),2,2);
None.gif    
--select @sToday--形如20060512
None.gif
    set @sYear=Convert(varchar(10),Year(getdate()))
None.gif    
--select @sYear--形如2006
None.gif
    
None.gif    
declare @sHead1 varchar(30),@iHeadLength int;
None.gif    
set @sHead1=@sHead+@sYear;--形如HEAD2006
None.gif
    --select @sHead1;--形如HEAD2006
None.gif
    set @iHeadLength=Len(@sHead1);
None.gif    
--select @iHeadLength;--形如6
None.gif
    set @sSql = N'select @sSubID=Max(SubString('
None.gif        
+@sFieldName+','+Convert(varchar(10),@iHeadLength+5)+',6)) from '
None.gif        
+@sTableName+' where SubString('+@sFieldName+',1,'
None.gif        
+Convert(varchar(10),@iHeadLength)+')='''+@sHead1+'''';
None.gif    
--select @sSql;--形如selectdot.gif..
None.gif
    exec sp_executesql @sSql,N'@sSubID varchar(20) output',@sSubID output;
None.gif
None.gif    
if ((@sSubID=''or (@sSubID is null))
None.gif        
set @sSubID='000001'
None.gif    
else
None.gif    
begin
None.gif        
declare @iSubID int;
None.gif        
set @iSubID=Convert(int,@sSubID)+1000001;
None.gif        
set @sSubID=SubString(Convert(varchar,@iSubID),2,6)
None.gif    
end
None.gif    
--select @sSubID;
None.gif
    set @sPK=@sHead+@sToday+@sSubID;
None.gif
None.gif
return
None.gif
END
--Demo 1: 
None.gif
use northwind 
None.gif
go 
None.gif
set statistics IO on 
None.gif
go 
None.gif
select count(*from northwind.dbo.employees 
None.gif
go 
None.gif
set statistics IO off 
None.gif
go 
None.gif
None.gif
use northwind 
None.gif
go 
None.gif
exec sp_spaceused employees 
None.gif
go 
None.gif
None.gif
--Demo 2: 
None.gif
set statistics time on 
None.gif
go 
None.gif
select count(*from northwind.dbo.employees 
None.gif
go 
None.gif
set statistics time off 
None.gif
go 
None.gif
None.gif
--Demo 3: 
None.gif
set showplan_text on 
None.gif
go 
None.gif
select count(*from northwind.dbo.employees 
None.gif
go 
None.gif
set showplan_text off 
None.gif
go 
None.gif
None.gif
--Demo 4: 
None.gif
set nocount on 
None.gif
go 
None.gif
select count(*from northwind.dbo.employees 
None.gif
go 
None.gif
set nocount off 
None.gif
go 
None.gif
None.gif
None.gif
--Demo 5查询单条sql语句的执行时间: 
None.gif
declare @start_time datetime 
None.gif
select @start_time=getdate() 
None.gif
select * from northwind.dbo.employees 
None.gif
select '查询语句的执行时间(毫秒)'=datediff(ms,@start_time,getdate()) 
None.gif
None.gif
--Demo 6查询成批的sql语句的执行时间: 
None.gif
create table #save_time(start_time datetime not null
None.gif
insert #save_time values(getdate()) 
None.gif
go 
None.gif
select * from employees 
None.gif
go 
None.gif
select * from orders 
None.gif
go 
None.gif
select '查询语句的执行时间(毫秒)'=datediff(ms,start_time,getdate()) 
None.gif
from #save_time 
None.gif
drop table #save_time 
None.gif
go 
None.gif
None.gif
--Demo 7返回语句的执行计划内容: 
None.gif
set showplan_all on 
None.gif
go 
None.gif
select * from pubs.dbo.authors 
None.gif
go 
None.gif
set showplan_all off 
None.gif
go 
None.gif
None.gif
--Demo 8从执行计划判断是否需要优化SQL: 
ExpandedBlockStart.gifContractedBlock.gif
/**//*SEEK操作*/ 
None.gif
set showplan_all on 
None.gif
go 
None.gif
select * from pubs.dbo.sales where stor_id>='7131' 
None.gif
go 
None.gif
set showplan_all off 
None.gif
go 
ExpandedBlockStart.gifContractedBlock.gif
/**//*SCAN操作*/ 
None.gif
set showplan_all on 
None.gif
go 
None.gif
select * from pubs.dbo.sales where ord_date is not null 
None.gif
go 
None.gif
set showplan_all off 
None.gif
go 
None.gif
None.gif
--Demo 9连接查询VS子查询: 
ExpandedBlockStart.gifContractedBlock.gif
/**//*子查询*/ 
None.gif
set statistics io on 
None.gif
go 
None.gif
select au_fname,au_lname from pubs.dbo.authors where au_id in 
None.gif(
select au_id from pubs.dbo.titleauthor) 
None.gif
set statistics io off 
None.gif
go 
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//*连接查询*/ 
None.gif
set statistics io on 
None.gif
go 
None.gif
select distinct au_fname,au_lname from pubs.dbo.authors as a inner join 
None.gifpubs.dbo.titleauthor 
as t on a.au_id=t.au_id 
None.gif
go 
None.gif
set statistics io off 
None.gif
go 
None.gif
None.gif
--Demo 10智能优化: 
None.gif
select p1.productname from northwind.dbo.products as p1 inner join 
None.gifnorthwind.dbo.products 
as p2 on (p1.unitprice=p2.unitprice) 
None.gif
where p2.productname like 'Alice%' 
None.gif
1. 查看数据库的版本     
None.gif   
select @@version 
None.gif    
None.gif   常见的几种SQL SERVER打补丁后的版本号: 
None.gif    
None.gif    
8.00.194   Microsoft SQL Server 2000  
None.gif    
8.00.384   Microsoft SQL Server 2000 SP1  
None.gif    
8.00.532   Microsoft SQL Server 2000 SP2  
None.gif    
8.00.760   Microsoft SQL Server 2000 SP3  
None.gif    
8.00.818   Microsoft SQL Server 2000 SP3 w/ Cumulative Patch MS03-031  
None.gif    
8.00.2039  Microsoft SQL Server 2000 SP4   
None.gif    
None.gif
2. 查看数据库所在机器操作系统参数     
None.gif   
exec master..xp_msver 
None.gif    
None.gif
3. 查看数据库启动的参数         
None.gif   sp_configure 
None.gif         
None.gif
4. 查看数据库启动时间         
None.gif   
select convert(varchar(30),login_time,120from master..sysprocesses where spid=1 
None.gif    
None.gif   查看数据库服务器名和实例名 
None.gif   
print 'Server Namedot.gifdot.gifdot.gifdot.gifdot.gif' + convert(varchar(30),@@SERVERNAME)         
None.gif   
print 'Instancedot.gifdot.gifdot.gifdot.gifdot.gifdot.gif' + convert(varchar(30),@@SERVICENAME)       
None.gif
None.gif
5. 查看所有数据库名称及大小 
None.gif   sp_helpdb 
None.gif    
None.gif   重命名数据库用的SQL 
None.gif   sp_renamedb 
'old_dbname''new_dbname' 
None.gif    
None.gif
6. 查看所有数据库用户登录信息 
None.gif   sp_helplogins 
None.gif    
None.gif   查看所有数据库用户所属的角色信息     
None.gif   sp_helpsrvrolemember 
None.gif    
None.gif   修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程 
None.gif    
None.gif   更改某个数据对象的用户属主 
None.gif   sp_changeobjectowner 
[@objectname =] 'object'[@newowner =] 'owner' 
None.gif    
None.gif   注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 
None.gif    
None.gif   把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本 
None.gif    
None.gif   查看某数据库下,对象级用户权限 
None.gif   sp_helprotect 
None.gif    
None.gif
7. 查看链接服务器         
None.gif   sp_helplinkedsrvlogin 
None.gif    
None.gif   查看远端数据库用户登录信息     
None.gif   sp_helpremotelogin 
None.gif    
None.gif
8.查看某数据库下某个数据对象的大小 
None.gif   sp_spaceused 
@objname 
None.gif   
None.gif   还可以用sp_toptables过程看最大的N(默认为50)个表 
None.gif   
None.gif   查看某数据库下某个数据对象的索引信息 
None.gif   sp_helpindex 
@objname 
None.gif    
None.gif   还可以用SP_NChelpindex过程查看更详细的索引情况 
None.gif   SP_NChelpindex 
@objname 
None.gif    
None.gif   clustered索引是把记录按物理顺序排列的,索引占的空间比较少。  
None.gif   对键值DML操作十分频繁的表我建议用非clustered索引和约束,fillfactor参数都用默认值。 
None.gif
None.gif   查看某数据库下某个数据对象的的约束信息 
None.gif   sp_helpconstraint 
@objname 
None.gif   
None.gif
9.查看数据库里所有的存储过程和函数 
None.gif   
use @database_name 
None.gif   sp_stored_procedures 
None.gif
None.gif   查看存储过程和函数的源代码 
None.gif   sp_helptext 
'@procedure_name' 
None.gif    
None.gif   查看包含某个字符串
@str的数据对象名称 
None.gif   
select distinct object_name(id) from syscomments where text like '%@str%' 
None.gif   
None.gif   创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数 
None.gif   
None.gif   解密加密过的存储过程和函数可以用sp_decrypt过程 
None.gif   
None.gif       
10.查看数据库里用户和进程的信息 
None.gif   sp_who 
None.gif
None.gif  查看SQL Server数据库里的活动用户和进程的信息 
None.gif   sp_who 
'active' 
None.gif
None.gif  查看SQL Server数据库里的锁的情况 
None.gif   sp_lock 
None.gif    
None.gif   进程号1
--50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程. 
None.gif

None.gif   spid是进程编号,dbid是数据库编号,objid是数据对象编号 
None.gif
None.gif   查看进程正在执行的SQL语句 
None.gif   
dbcc inputbuffer () 
None.gif            
None.gif  推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的SQL语句 
None.gif   sp_who3 
None.gif    
None.gif  检查死锁用sp_who_lock过程 
None.gif   sp_who_lock     
None.gif        
None.gif       
11.查看和收缩数据库日志文件的方法 
None.gif        
None.gif          查看所有数据库日志文件大小           
None.gif          
dbcc sqlperf(logspace) 
None.gif  
None.gif          如果某些日志文件较大,收缩简单恢复模式数据库日志,收缩后
@database_name_log的大小单位为M 
None.gif   
backup log @database_name with no_log 
None.gif   
dbcc shrinkfile (@database_name_log5
None.gif
None.gif       
12.分析SQL Server SQL 语句的方法: 
None.gif        
None.gif   
set statistics time {on | off
None.gif
None.gif   
set statistics io {on | off
None.gif
None.gif           图形方式显示查询执行计划 
None.gif            
None.gif           在查询分析器
->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形 
None.gif            
None.gif           文本方式显示查询执行计划 
None.gif
None.gif   
set showplan_all {on | off
None.gif    
None.gif   
set showplan_text { on | off } 
None.gif
None.gif   
set statistics profile { on | off } 
None.gif    
None.gif  
None.gif       
13.出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法 
None.gif   
None.gif  先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然后做修复操作 
None.gif   
None.gif  
alter database [@error_database_name] set single_user 
None.gif   
None.gif  修复出现不一致错误的表 
None.gif   
None.gif  
dbcc checktable('@error_table_name',repair_allow_data_loss) 
None.gif   
None.gif  或者可惜选择修复出现不一致错误的小型数据库名 
None.gif   
None.gif  
dbcc checkdb('@error_database_name',repair_allow_data_loss) 
None.gif
None.gif  
alter database [@error_database_name] set multi_user 
None.gif
None.gif  CHECKDB 有3个参数: 
None.gif
None.gif  repair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误, 
None.gif  以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。 
None.gif  修复操作可以在用户事务下完成以允许用户回滚所做的更改。 
None.gif  如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。 
None.gif  如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。 
None.gif  修复完成后,请备份数据库。  
None.gif
None.gif  repair_fast 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。 
None.gif  这些修复可以很快完成,并且不会有丢失数据的危险。  
None.gif
None.gif  repair_rebuild 执行由 repair_fast 完成的所有修复,包括需要较长时间的修复(如重建索引)。 
None.gif  执行这些修复时不会有丢失数据的危险。  
None.gif MS-SQL数据库开发常用汇总 1.按姓氏笔画排序:
None.gif
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 
None.gif
2.数据库加密:
None.gif
select encrypt('原始密码')
None.gif
select pwdencrypt('原始密码')
None.gif
select pwdcompare('原始密码','加密后密码'= 1--相同;否则不相同 encrypt('原始密码')
None.gif
select pwdencrypt('原始密码')
None.gif
select pwdcompare('原始密码','加密后密码'= 1--相同;否则不相同
None.gif
3.取回表中字段:
None.gif
declare @list varchar(1000),@sql nvarchar(1000
None.gif
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
None.gif
set @sql='select '+right(@list,len(@list)-1)+' from 表A' 
None.gif
exec (@sql)
None.gif
4.查看硬盘分区:
None.gif
EXEC master..xp_fixeddrives
None.gif
5.比较A,B表是否相等:
None.gif
if (select checksum_agg(binary_checksum(*)) from A)
None.gif
=
None.gif(
select checksum_agg(binary_checksum(*)) from B)
None.gif
print '相等'
None.gif
else
None.gif
print '不相等'
None.gif
6.杀掉所有的事件探察器进程:
None.gif
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
None.gif
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
None.gif
EXEC sp_msforeach_worker '?'
None.gif
7.记录搜索:
None.gif开头到N条记录
None.gif
Select Top N * From 表
None.gif
-------------------------------
None.gif
N到M条记录(要有主索引ID)
None.gif
Select Top M-* From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
None.gif
----------------------------------
None.gif
N到结尾记录
None.gif
Select Top N * From 表 Order by ID Desc
None.gif
8.如何修改数据库的名称:
None.gifsp_renamedb 
'old_name''new_name' 
None.gif
9:获取当前数据库中的所有用户表
None.gif
select Name from sysobjects where xtype='u' and status>=0
None.gif
10:获取某一个表的所有字段
None.gif
select name from syscolumns where id=object_id('表名')
None.gif
11:查看与某一个表相关的视图、存储过程、函数
None.gif
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
None.gif
12:查看当前数据库中所有存储过程
None.gif
select name as 存储过程名称 from sysobjects where xtype='P'
None.gif
13:查询用户创建的所有数据库
None.gif
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
None.gif或者
None.gif
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
None.gif
14:查询某一个表的字段和数据类型
None.gif
select column_name,data_type from information_schema.columns
None.gif
where table_name = '表名' 
None.gif
[n].[标题]:
None.gif
Select * From TableName Order By CustomerName 
None.gif
[n].[标题]:
None.gif
None.gif快速获取表test的记录总数 : 
None.gif
select rows from sysindexes where id = object_id('test'and indid in (0,1)
None.gif提取数据库内所有表的字段详细说明的SQL语句 :
None.gif
None.gif
SELECT 
None.gif(
case when a.colorder=1 then d.name else '' end) N'表名'
None.gifa.colorder N
'字段序号'
None.gifa.name N
'字段名'
None.gif(
case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then ''else '' 
None.gif
end) N'标识'
None.gif(
case when (SELECT count(*
None.gif
FROM sysobjects 
None.gif
WHERE (name in 
None.gif(
SELECT name 
None.gif
FROM sysindexes 
None.gif
WHERE (id = a.id) AND (indid in 
None.gif(
SELECT indid 
None.gif
FROM sysindexkeys 
None.gif
WHERE (id = a.id) AND (colid in 
None.gif(
SELECT colid 
None.gif
FROM syscolumns 
None.gif
WHERE (id = a.id) AND (name = a.name))))))) AND 
None.gif(xtype 
= 'PK'))>0 then '' else '' end) N'主键'
None.gifb.name N
'类型'
None.gifa.length N
'占用字节数'
None.gif
COLUMNPROPERTY(a.id,a.name,'PRECISION'as N'长度'
None.gif
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0as N'小数位数'
None.gif(
case when a.isnullable=1 then ''else '' end) N'允许空'
None.gif
isnull(e.text,'') N'默认值'
None.gif
isnull(g.[value],''AS N'字段说明' 
None.gif
FROM syscolumns a 
None.gif
left join systypes b 
None.gif
on a.xtype=b.xusertype 
None.gif
inner join sysobjects d 
None.gif
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' 
None.gif
left join syscomments e 
None.gif
on a.cdefault=e.id 
None.gif
left join sysproperties g 
None.gif
on a.id=g.id AND a.colid = g.smallid 
None.gif
order by object_name(a.id),a.colorder
None.gif获取表结构
[把 'sysobjects' 替换 成 'tablename' 即可] 
None.gif
None.gif
SELECT CASE IsNull(I.name, ''
None.gif
When '' Then '' 
None.gif
Else '*' 
None.gif
End as IsPK, 
None.gif
Object_Name(A.id) as t_name, 
None.gifA.name 
as c_name, 
None.gif
IsNull(SubString(M.text1254), ''as pbc_init, 
None.gifT.name 
as F_DataType, 
None.gif
CASE IsNull(TYPEPROPERTY(T.name, 'Scale'), ''
None.gif
WHEN '' Then Cast(A.prec as varchar
None.gif
ELSE Cast(A.prec as varchar+ ',' + Cast(A.scale as varchar
None.gif
END as F_Scale, 
None.gifA.isnullable 
as F_isNullAble 
None.gif
FROM Syscolumns as A 
None.gif
JOIN Systypes as T 
None.gif
ON (A.xType = T.xUserType AND A.Id = Object_id('sysobjects') ) 
None.gif
LEFT JOIN ( SysIndexes as I 
None.gif
JOIN Syscolumns as A1 
None.gif
ON ( I.id = A1.id and A1.id = object_id('sysobjects'and (I.status & 0x800= 0x800 AND A1.colid <= I.keycnt) ) 
None.gif
ON ( A.id = I.id AND A.name = index_col('sysobjects', I.indid, A1.colid) ) 
None.gif
LEFT JOIN SysComments as M 
None.gif
ON ( M.id = A.cdefault and ObjectProperty(A.cdefault, 'IsConstraint'= 1 ) 
None.gif
ORDER BY A.Colid ASC
None.gif四种方法取表里n到m条纪录:
None.gif
None.gif
1.
None.gif
select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入
None.gif
set rowcount n
None.gif
select * from 表变量 order by columnname desc
None.gif
2.
None.gif
select top n * from (select top m * from tablename order by columnname) a order by columnname desc
None.gif
3.如果tablename里没有其他identity列,那么:
None.gif
select identity(int) id0,* into #temp from tablename
None.gif取n到m条的语句为:
None.gif
select * from #temp where id0 >=and id0 <= m
None.gif如果你在执行 
select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行:
None.gif
exec sp_dboption 你的DB名字,'select into/bulkcopy',true
None.gif
None.gif
None.gif
4.如果表里有identity属性,那么简单:
None.gif
select * from tablename where identitycol between n and m 
None.gif
None.gif
--------------------------------------------------------------------------------
None.gif

None.gif数据库管理常用SQL
None.gif
None.gif
1. 查看数据库的版本 
None.gif
select @@version 
None.gif
None.gif
2. 查看数据库所在机器操作系统参数 
None.gif
exec master..xp_msver 
None.gif
None.gif
3. 查看数据库启动的参数 
None.gifsp_configure 
None.gif
None.gif
4. 查看数据库启动时间 
None.gif
select convert(varchar(30),login_time,120from master..sysprocesses where spid=1 
None.gif
None.gif查看数据库服务器名和实例名 
None.gif
print 'Server Namedot.gifdot.gifdot.gifdot.gifdot.gif' + convert(varchar(30),@@SERVERNAME
None.gif
print 'Instancedot.gifdot.gifdot.gifdot.gifdot.gifdot.gif' + convert(varchar(30),@@SERVICENAME
None.gif
5. 查看所有数据库名称及大小 
None.gifsp_helpdb 
None.gif
None.gif重命名数据库用的SQL 
None.gifsp_renamedb 
'old_dbname''new_dbname' 
None.gif
None.gif
6. 查看所有数据库用户登录信息 
None.gifsp_helplogins 
None.gif
None.gif查看所有数据库用户所属的角色信息 
None.gifsp_helpsrvrolemember 
None.gif
None.gif修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程 
None.gif
None.gif更改某个数据对象的用户属主 
None.gifsp_changeobjectowner 
[@objectname =] 'object'[@newowner =] 'owner' 
None.gif
None.gif注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 
None.gif
None.gif把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本 
None.gif
None.gif
7. 查看链接服务器 
None.gifsp_helplinkedsrvlogin 
None.gif
None.gif查看远端数据库用户登录信息 
None.gifsp_helpremotelogin 
None.gif
None.gif
8.查看某数据库下某个数据对象的大小 
None.gifsp_spaceused 
@objname 
None.gif
None.gif还可以用sp_toptables过程看最大的N(默认为50)个表 
None.gif
None.gif查看某数据库下某个数据对象的索引信息 
None.gifsp_helpindex 
@objname 
None.gif
None.gif还可以用SP_NChelpindex过程查看更详细的索引情况 
None.gifSP_NChelpindex 
@objname 
None.gif
None.gifclustered索引是把记录按物理顺序排列的,索引占的空间比较少。 
None.gif对键值DML操作十分频繁的表我建议用非clustered索引和约束,fillfactor参数都用默认值。 
None.gif查看某数据库下某个数据对象的的约束信息 
None.gifsp_helpconstraint 
@objname 
None.gif
None.gif
9.查看数据库里所有的存储过程和函数 
None.gif
use @database_name 
None.gifsp_stored_procedures 
None.gif查看存储过程和函数的源代码 
None.gifsp_helptext 
'@procedure_name' 
None.gif
None.gif查看包含某个字符串
@str的数据对象名称 
None.gif
select distinct object_name(id) from syscomments where text like '%@str%' 
None.gif
None.gif创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数 
None.gif
None.gif解密加密过的存储过程和函数可以用sp_decrypt过程 
None.gif
None.gif
10.查看数据库里用户和进程的信息 
None.gifsp_who 
None.gif查看SQL Server数据库里的活动用户和进程的信息 
None.gifsp_who 
'active' 
None.gif查看SQL Server数据库里的锁的情况 
None.gifsp_lock 
None.gif
None.gif进程号1
--50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程. 
None.gif
spid是进程编号,dbid是数据库编号,objid是数据对象编号 
None.gif查看进程正在执行的SQL语句 
None.gif
dbcc inputbuffer () 
None.gif
None.gif推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的SQL语句 
None.gifsp_who3 
None.gif
None.gif检查死锁用sp_who_lock过程 
None.gifsp_who_lock 
None.gif
None.gif
11.收缩数据库日志文件的方法 
None.gif收缩简单恢复模式数据库日志,收缩后
@database_name_log的大小单位为M 
None.gif
backup log @database_name with no_log 
None.gif
dbcc shrinkfile (@database_name_log5
None.gif
12.分析SQL Server SQL 语句的方法: 
None.gif
None.gif
set statistics time {on | off
None.gif
set statistics io {on | off
None.gif图形方式显示查询执行计划 
None.gif
None.gif在查询分析器
->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形 
None.gif
None.gif文本方式显示查询执行计划 
None.gif
set showplan_all {on | off
None.gif
None.gif
set showplan_text { on | off } 
None.gif
set statistics profile { on | off } 
None.gif
None.gif
13.出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法 
None.gif
None.gif先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然后做修复操作 
None.gif
None.gif
alter database [@error_database_name] set single_user 
None.gif
None.gif修复出现不一致错误的表 
None.gif
None.gif
dbcc checktable('@error_table_name',repair_allow_data_loss) 
None.gif
None.gif或者可惜选择修复出现不一致错误的小型数据库名 
None.gif
None.gif
dbcc checkdb('@error_database_name',repair_allow_data_loss) 
None.gif
alter database [@error_database_name] set multi_user 
None.gifCHECKDB 有3个参数: 
None.gifrepair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误, 
None.gif以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。 
None.gif修复操作可以在用户事务下完成以允许用户回滚所做的更改。 
None.gif如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。 
None.gif如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。 
None.gif修复完成后,请备份数据库。 
None.gifrepair_fast 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。 
None.gif这些修复可以很快完成,并且不会有丢失数据的危险。 
None.gifrepair_rebuild 执行由 repair_fast 完成的所有修复,包括需要较长时间的修复(如重建索引)。 
None.gif执行这些修复时不会有丢失数据的危险。 
None.gif
None.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值