zoukankan      html  css  js  c++  java
  • Sql语句积累

    最近在给一家客户做系统维护时,需要查看数据库表的大小,相关的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

  • 相关阅读:
    Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理
    Spring Boot2 系列教程(十二)@ControllerAdvice 的三种使用场景
    Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置
    Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
    Python pass 语句
    Python continue 语句
    Python break 语句
    Python 循环嵌套
    Python for 循环语句
    小程序开发中的六大问题难点
  • 原文地址:https://www.cnblogs.com/likeyou/p/2986233.html
Copyright © 2011-2022 走看看