最近在给一家客户做系统维护时,需要查看数据库表的大小,相关的sql如下:
1. exec sp_spaceused '表名' --(SQL统计数据,大量事务操作后可能不准)
2. exec sp_spaceused '表名', true --(准确的表空间大小,但可能会花些统计时间)
3. exec sp_spaceused -- (数据库大小查询)
4. exec sp_MSforeachtable "exec sp_spaceused '?'" --(所有用户表空间表小,SQL统计数据,,大量事务操作后可能不准)
5. exec sp_MSforeachtable "exec sp_spaceused '?',true" --(所有用户表空间表小,大数据库慎用)
数据库创建完后,且正在使用。但还需要添加字段。如下:
6.
--判断是否存在字段
if exists (Select * From syscolumns Where Id=object_id('表') And Name='字段')
print
'PersonID Exists'
else print
'PersonID not Exists'
7.Alter Table TableName Add 字段Varchar(20) --添加字段
8. Alter Table TableName Drop Column 字段 --删除字段
9. Alter Table TableName Alter Column 字段 类型 --修改字段类型
Alter Table TableName drop column id --修改为自增
Alter Table TableName add id int identity(1,1)
10.
Declare @path varchar(500)
set @path='E:\路径\'+CONVERT(VARCHAR, GETDATE(), 105)+'.Bak'
select @path
BACKUP DATABASE 数据库
TO DISK = @path
WITH FORMAT,
MEDIANAME = 'SQLServerBackups',
NAME = '备份';
GO
11.复制表
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
12.DATEDIFF(返回两个日期之间间隔)
SELECT DATEDIFF(day,'2012-12-12','2012-12-13') AS DiffDate 返回两个日期之间的天数
SELECT DATEDIFF(HOUR,'2012-12-12','2012-12-13') AS DiffDate 返回两个日期之间的小时
SELECT DATEDIFF(minute,'2012-12-12','2012-12-13') AS DiffDate 返回两个日期之间的分钟
12. ms sql里的控制字符列表
print replace(@msg,'|',char(10))
--Tab char(9)
--换行 char(10)
--回车 char(13)
--单引号 char(39)
--双引号 char(34)
13. exists
if exists (select * from sys.databases where name = 'databasename') 判断库是否存在
if exists (select * from sysobjects where id = object_id('tablsename') and OBJECTPROPERTY(id, 'IsUserTable') = 1) 判断表是否存在
简写if exists(select * from sysobjects where name='[表]') drop table 关系表
if exists (select * from sysobjects where id = object_id('procname') and OBJECTPROPERTY(id, 'IsProcedure') = 1) 判断存储过程
14.删除重复保留一条
delete table where id in (
select max(id) from table group by 重复 having count(重复) > 1)
16.將字串值重複指定的次數。
SELECT REPLICATE ( 'K' ,5 ) --KKKKK
16.统计有多少个汉字
select datalength('kk中国123')-len('kk中国123')
select nullif('kk','kk') --相等为null,否则取第一个
select isnull(null,'kk') --第一个值不为空取第一个,否则为第二个
select coalesce(null,null,'kk','中国') --返回第一个非空值
17.小数取整
select CEILING(12.7) --[13];取大于12.7的最小整数
select CEILING(12.2) --[13];取大于12.2的最小整数
select FLOOR(12.7) --[12];取小于12.7的最大整数
select FLOOR(12.2) --[12];取小于12.2的最大整数
select round(12.77,0) --[13.00];四舍五入,0位小数
select round(12.24,1) --[12.20];四舍五入,1位小数
18.按位置替换
select STUFF ( 'ABCDEFG' , 2 , 0 ,'-' ) --[A-BCDEFG];第二个位置,取字符长度为0,替换为-
select STUFF ( 'ABCDEFG' , 2 , 1 ,'b' ) --[AbCDEFG];第二个位置,取字符长度为1,替换为b
select STUFF ( 'ABCDEFG' , 2 , 2 ,'*' ) --[A*DEFG];第二个位置,取字符长度为2,替换为*
19.按相同字符替换
select REPLACE('ABCDEFG','B','b') --[AbCDEFG];将所有B对应替换为b
select REPLACE('ABCDEFG-Bc','BC','*') --[A*DEFG-*];将所有BC对应替换为一个*,不区分大小写
20.判断某字符存在
select CHARINDEX('456','123456789')
select CHARINDEX('1','235694526') --[0];判断1是否存在
select CHARINDEX('1','12314510215985') --[1];1出现的位置
select CHARINDEX('1','12314510215985',8) --[10];从第八个字符查找,1在字符串中出现的位置
21.起始位置,支持匹配表达式
select patindex('456', '123456789') --[0];
select patindex('456%', '123456789') --[0];
select patindex('%456%', '123456789') --[4];
select patindex('12%', '123456789') --[1];
select patindex('__3%', '123456789') --[1];
select patindex('%[js]%','hsdjgjsrgsdgfjt')--返回j或s中第一个字符出现的位置
select patindex('%[^js]%','ssjjgjsrgsdgfjt')--返回不是j和s外第一个字符出现的位置
22.修改数据表名称
exec sp_rename table_1,table_2;
23.修改数据库名称
alter database 'database_1’ MODIFY NAME = 'database_2';
24.存储过程返回条数
DECLARE
@count INT
select @count= COUNT(*) from table
if(@count>1)
SELECT (@count)
else
SELECT 'aaa'
25.sql语句耗时1
set statistics time on;
sql
set statistics time off;
26.sql语句耗时2
declare @q datetime
set @q = getdate()
SELECT *FROM Table
select [耗费时间(毫秒)]=datediff(ms,@q,getdate())
27. select xtype 类型,prec 长度 from where syscolumns Id= object_id('表明')
28.数值对应字段类型
34 image
35 text
36 uniqueidentifier
48 tinyint
52 smallint
56 int
58 smalldatetime
59 real
60 money
61 datetime
62 float
98 sql_variant
99 ntext
104 bit
106 decimal
108 numeric
122 smallmoney
127 bigint
165 varbinary
167 varchar
173 binary
175 char
189 timestamp
231 sysname
231 nvarchar
239 nchar