SqlServer零碎知识

作者:Dreamer
出处:http://www.dreamerlzy.com/blog/article/detail/sqlserver-piece-knowledge
说明:本文版权归作者所有,欢迎转载,但未经作者同意时,请在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
参考: 无

1、--获取当前数据库信息 大小  名字  日志大小
exec sp_spaceused    
  
2、--获取当前数据库表
exec sp_tables     
 
3、--获取当前帐号下所有数据库信息
exec sp_databases   

4、--更改表名
exec sp_rename 'a','b' 
  
5、--更改列名
exec sp_rename 'b.about','aaaa','column' 
  
6、--查询所有存储过程
select * from sys.objects where type='p' 
  
7、--数据库版本号
select @@version

8、--服务器名称   
select @@servicename  

9、--sql  求1-100的和
declare @i int,@sum int
 set @i=1
 set @sum=0
  while (@i<=100)
   begin
    set @sum=@sum+@i
    set @i=@i+1
  end
 print @sum
go

10、--sql case语句
select *,'是否显示'=
  case  isshow
   when 'true' then '显示'
   when 'false' then '不显示'
   else '0.0'
  end
from pas_newsinfo

11、--去除重复后查询数量
select count(distinct isshow) from pas_newsinfo  

12、--查询是否为空
select * from Pas_aboutinfo where extr is not null 
  
13、--公式表表达式  把一个结果集作为表 方便  后面使用
with ceshi as    
(
select tid,max(price) as price from PAS_PriceRecord group by tid
)
select * from ceshi

14、--自连接(当同一张表中的字段有关联时 使用)
select distinct s.* from student s, student s1 where s.id <> s1.id and s.sex = s1.sex;  

15、---时间格式化
select datename(month,getdate())    
select datepart(month,getdate())
select day('2012-3-30')             ---当前日期的天
select getutcdate()
select getdate()

16、---时间计算
select dateadd(year,1,getdate())     ---时间+
select datediff(day,'2012-11-29',getdate())   ---时间差

17、--查询数据类型长度
select col_length('PAS_PPT',col_name(object_id('PAS_PPT'),2)) 
  
18、--字符的长度
select len('你乖哈')   
              
19、--查询列名
select col_name(object_id('PAS_PPT'),2) 

20、--视图
if exists(select * from sysobjects where name='ceshi')
drop view ceshi
go
create view ceshi
as
select * from Pas_NewsInfo
go
select * from ceshi

21、--清除所有表中的数据
declare @trun_name varchar(8000)
set @trun_name=''
select @trun_name=@trun_name + 'truncate table ' + [name] + ' ' from sysobjects where xtype='U' and status > 0
exec (@trun_name)
该方法适合表不是非常多的情况,否则表数量过多,超过字符串的长度,不能进行完全清理.

22、--批量删除表
DECLARE @STRING VARCHAR(8000)
WHILE EXISTS(SELECT * FROM sys.all_objects WHERE type = 'U' )
BEGIN
 SELECT @STRING='DROP  table '+b.name+'.'+a.name  FROM   sys.all_objects a 
 left join sys.schemas b on a.schema_id = b.schema_id
WHERE   a.type = 'U' and  a.name not like '%wh_%'
 --SELECT @STRING
 EXEC(@STRING)
END
GO

drop table in (
SELECT * FROM sys.all_objects WHERE type = 'U' and name not like '%wh_%'
)

23、清除数据库日志

-- sql2005 清空数据库日志
dump transaction kingho2013  with no_log

-- sql 2008 和 2012 清空数据库日志文件
--清除单个数据库日志
USE [master]   
GO   
ALTER DATABASE kingho2013 SET RECOVERY SIMPLE WITH NO_WAIT   
GO   
ALTER DATABASE kingho2013 SET RECOVERY SIMPLE   --简单模式   
GO