• SQL笔记


    1.通过sp里面的关键字查询sp名称
    SELECT obj.Name 存储过程名, sc.TEXT 存储过程内容  
    FROM syscomments sc  
    INNER JOIN sysobjects obj ON sc.Id = obj.ID  
    WHERE obj.Name LIKE 'OTD%' AND sc.TEXT LIKE '%关键字%' 
    2.修改栏位名称
    sp_rename 'PRD_GET_PARM_VALUE_TASK.TASK_VALUE',PARM_VALUE,'column'
    3.修改表名
    sp_rename tablename,newtablename
    4.修改栏位数据类型
    ALTER TABLE student ALTER COLUMN name VARCHAR(200) NOT NULL DEFAULT ''
    5.删除栏位
    ALTER TABLE student DROP COLUMN nationality;
    6.增加字段
    ALTER TABLE student Add nationality varchar(20)
    7.增加索引
    CREATE NONCLUSTERED INDEX AAA ON dbo.Base_Area(F_AreaId,F_ParentId)
    CIX_聚集索引名、NCIX_非聚集索引名
    8.设置唯一约束
    alter table Base_Area add constraint unique1 UNIQUE(F_AreaId,F_ParentId)
    9.删除索引
    DROP INDEX NCIX_CODE_SN ON PRD_SN_KEY_PARM_RELEVANCE
    alter table Sale_OrderList drop constraint IX_Sale_BOM_GMIDandDate
    10.修改索引名称
    sp_rename 'tabName.old_indName','new_indName','INDEX'
    11.varchar可以接收任何类型的数据,计算百分比时可以这样
    SELECT PRODUCTION AS '产品',
     PRODUCT AS '实际产出',
     CAST(CAST(PRODUCT AS decimal (20,2)) / CAST (PRODUCTPLAN AS decimal (20,2) ) AS DECIMAL (5,2)) *100  AS '达成率',
     SCRAPPED AS '报废数量',
     CAST(CAST(SCRAPPED AS decimal (20,2)) / CAST (PRODUCT AS decimal (20,2) ) AS DECIMAL (5,2)) *100  AS '报废率'
      FROM @TABLE
    
    CAST(round(convert(float,isnull(@COMPLETE_QTY4,0))/convert(float,ISNULL(@PLAN_QTY4,1))*100,1) as varchar(50))+'%'
    12.删除数据库日志
    DUMP TRANSACTION 数据库名 WITH NO_LOG
    13.
    SELECT XXXXX FROM XXXXX GROUP BY  CASE WHEN RIGHT(PROCESS_CODE,2) IN('LH','RH') THEN LEFT(PROCESS_CODE,LEN(PROCESS_CODE)-2) ELSE PROCESS_CODE END
    14.开窗函数
    SELECT FName, FCITY, FAGE, FSalary,
    (
    SELECT COUNT(FName) FROM T_Person
    WHERE FSALARY<5000
    )
    FROM T_Person
    WHERE FSALARY<5000
    开窗函数如下:
    SELECT FName, FCITY, FAGE, FSalary, COUNT(FName) OVER()
    FROM T_Person
    WHERE FSALARY<5000
    
    SELECT * FROM (SELECT T.DATA_ID,T.EQU_NO,T.UNIT_SN,T.UNIT_HISTORY_REC_NO,T.CHILD_UNIT_SN,T.DATA_NAME,T.VALUE_TEXT,T.DATA_DESC,T.RESULT,T.DATA_SEQ,ROW_NUMBER() OVER (PARTITION BY T.DATA_ID ORDER BY CONVERT(INT,T.DATA_SEQ) DESC) AS 'NO' FROM 
    (SELECT QH.DATA_ID,QH.EQU_NO,QH.UNIT_SN,QH.UNIT_HISTORY_REC_NO,QH.CHILD_UNIT_SN,QB.DATA_NAME,QB.VALUE_TEXT,QB.DATA_DESC,QB.DATA_SEQ,QB.RESULT FROM QMS_INSPECTION_DATA_HEADER AS 
    QH LEFT JOIN QMS_INSPECTION_DATA_BODY AS QB ON QB.DATA_ID=QH.DATA_ID WHERE CHILD_UNIT_STATE='FAIL' AND QB.RESULT='F' OR QB.RESULT='FAIL')T)T2 WHERE T2.NO=1
    15.查询所有表的大小
    create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100)) 
     
    declare @name varchar(100) 
    declare cur cursor  for 
        select name from sysobjects where xtype='u' order by name 
    open cur 
    fetch next from cur into @name 
    while @@fetch_status=0 
    begin 
        insert into #data 
        exec sp_spaceused   @name 
        print @name 
     
        fetch next from cur into @name 
    end 
    close cur 
    deallocate cur 
     
    create table #DataNew(name varchar(100),row int,reserved int,data int,index_size int,unused int) 
     
    insert into #dataNew 
    select name,convert(int,row) as row,convert(int,replace(reserved,'KB','')) as reserved,convert(int,replace(data,'KB','')) as data, 
    convert(int,replace(index_size,'KB','')) as index_size,convert(int,replace(unused,'KB','')) as unused from #data  
     
    select * from #dataNew order by data DESC
    
    16收缩数据库
    USE OTDMES;
    
    GO
    
    -- 将数据库设置为简单恢复模式,
    
    ALTER DATABASE OTDMES
    
    SET RECOVERY SIMPLE;
    
    GO
    
    --压缩为100M
    
    DBCC SHRINKFILE (OTDMES_log, 100);
    
    GO
    
    -- 恢复
    
    ALTER DATABASE OTDMES
    
    SET RECOVERY FULL;
    
    GO
    
    17增加索引建议
    SELECT TOP 30
    [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)
    , avg_user_impact
    , TableName = statement
    , [EqualityUsage] = equality_columns
    , [InequalityUsage] = inequality_columns
    , [Include Cloumns] = included_columns
    FROM sys.dm_db_missing_index_groups g
    INNER JOIN sys.dm_db_missing_index_group_stats s
    ON s.group_handle = g.index_group_handle
    INNER JOIN sys.dm_db_missing_index_details d
    ON d.index_handle = g.index_handle
    where statement like '%ecology%'
    ORDER BY [Total Cost] DESC;
    
    18SQL语句优化
    SELECT  c.last_execution_time ,    --最后一次执行时间
            c.execution_count ,    --执行次数
            c.total_logical_reads ,    --总逻辑读(次)
            c.total_logical_writes ,    --总逻辑写(次)
            c.total_elapsed_time ,    --总运行(执行)语句使用的时间(微秒)
            c.last_elapsed_time ,    --最后运行(执行)语句使用的时间(微秒)
            q.[text] ,    --对应的sql语句
            c.total_worker_time / 1000000 total_worker_time_second    --c.total_worker_time 总工作时间(微秒)
    FROM    ( SELECT TOP 50
                        qs.*
              FROM      sys.dm_exec_query_stats qs
              ORDER BY  qs.total_worker_time DESC
            ) AS c
            CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS q
    ORDER BY c.last_elapsed_time DESC;
    
    19 
    WITH x AS(
    SELECT PH.RECID,PH.REC_NO,PH.PROCESS_CODE,PH.UNIT_SN,PH.UNIT_MATERIAL_NO,PH.UNIT_STATE,
    PH.UNIT_STATUS,PH.NEXT_PROCESS_CODE,ISNULL(PI.DEFECT_CODE,'') AS 'DEFECT_CODE',
    ROW_NUMBER() OVER (PARTITION BY PH.PROCESS_CODE,PH.UNIT_SN ORDER BY PH.RECID DESC) AS 'NO'
    FROM dbo.PRD_UNIT_PRD_HISTORY AS PH WITH (NOLOCK) 
    LEFT JOIN PRD_UNIT_DEFECT_INFO AS PI WITH(NOLOCK) ON PI.UNIT_HISTORY_ID=PH.RECID
    WHERE ISNULL(PH.REMARK,'')<>'Rework' 
    )
    
    
    
    
    SELECT RECID,REC_NO,PROCESS_CODE,UNIT_SN,T.UNIT_MATERIAL_NO,UNIT_STATE,UNIT_STATUS,NEXT_PROCESS_CODE,DEFECT_CODE,T.NO FROM x T 
    WHERE T.NO>1 AND EXISTS (SELECT b.RECID frpm FROM x a,x b WHERE b.NO=a.NO+1 AND b.UNIT_SN=a.UNIT_SN AND b.PROCESS_CODE=a.PROCESS_CODE
    AND b.RECID=T.RECID)
    
    
    with x as(
    select 1 as id, 'n1' as name, 'u1' as muser union all 
    select 2 as id, 'n1' as name, 'u2' as muser union all 
    select 3 as id, 'n1' as name, 'u2' as muser union all 
    select 4 as id, 'n2' as name, 'u3' as muser union all 
    select 5 as id, 'n1' as name, 'u4' as muser 
    )
    select * from x c where not exists(
    select b.id from x a, x b
    where b.id = a.id-1
    and b.name = a.name
    and c.id = b.id
    )
    order by c.id
    
    20.修改自定义表类型的结构
    --判断Type是否存在,如果存在,重命名,随后之后才再删除,否则无法直接删除
    IF EXISTS (SELECT 1 FROM sys.types t join sys.schemas s on t.schema_id=s.schema_id 
          and t.name='SH_DX_DATA' and s.name='dbo')
     EXEC sys.sp_rename 'dbo.SH_DX_DATA', 'obsoleting_SH_DX_DATA';
    GO
     
     
    --重建TYPE,比如原来是四个字段,现在想修改为三个字段,或者原来有三个字段想加一个字段变成四个字段
    CREATE TYPE [dbo].[SH_DX_DATA] AS TABLE(
        [PRODUCT_NO] [VARCHAR](16) NULL,
        [UNIT_SN] [VARCHAR](400) NULL)
    GO
     
    --将原来引用将要删除的TYPE全部重建一遍,否则原始存储过程会报错
    DECLARE @Name NVARCHAR(500);
    DECLARE REF_CURSOR CURSOR FOR
    SELECT referencing_schema_name + '.' + referencing_entity_name
    FROM sys.dm_sql_referencing_entities('dbo.SH_DX_DATA', 'TYPE');
     OPEN REF_CURSOR;
     FETCH NEXT FROM REF_CURSOR INTO @Name;
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
      EXEC sys.sp_refreshsqlmodule @name = @Name;
      FETCH NEXT FROM REF_CURSOR INTO @Name;
     END;
    CLOSE REF_CURSOR;
    DEALLOCATE REF_CURSOR;
    GO
     
    --最后删除原始的被重命名的TableType(被第一步重名的那个)
    IF EXISTS (SELECT 1 FROM sys.types t 
       join sys.schemas s on t.schema_id=s.schema_id 
       and t.name='obsoleting_SH_DX_DATA' and s.name='dbo')
     DROP TYPE dbo.obsoleting_SH_DX_DATA
    GO
     
    --最后执行授权
    GRANT EXECUTE ON TYPE::dbo.SH_DX_DATA TO public
    GO
    
    
    SELECT COUNT(1) FROM sysobjects WHERE xtype='U'
    SELECT COUNT(1) FROM sysobjects WHERE xtype='V'
    SELECT COUNT(1) FROM sysobjects WHERE xtype='P'
    View Code
  • 相关阅读:
    新·刷题记录【争取认真来做】
    Codeforces 235D Graph Game
    Codeforces 235B Let's Play Osu!
    Codeforces 235E Number Challenge
    Codeforces 235C Cyclical Quest
    AHOI2017游记
    bzoj4826: [Hnoi2017]影魔
    大数分解模板
    A new start
    0712
  • 原文地址:https://www.cnblogs.com/songjiali/p/15975961.html
Copyright © 2020-2023  润新知