zoukankan      html  css  js  c++  java
  • sqlserver数据库中sql的使用

    目录:

     1. 分组排序更新

     2. 将查询结果插入到新的表中

     3. 创建/更新存储过程

     4. 创建/更新视图

     5. 插入数据

     6. 增加表格的列

     7. 创建表格

     8. 创建索引

     9. 递归查询


    1. 分组排序更新

    将分组记录中的第一条数据的某个字段更新到第二条数据上的字段;

    --把序号为2的结束时间 更新为 序号为1的开始时间
    WITH t2 as (
        SELECT * FROM(
            SELECT 
                ROW_NUMBER() OVER ( partition by C_BH_ZFXX ORDER BY DT_KSSJ DESC) as num ,
                C_BH_ZFXX,
                DT_KSSJ,
                DT_JSSJ,
                C_BH
                FROM DB_JY..T_FJFY_FJJL 
            WHERE
            --c_bh_zfxx  in( '046B7C4311C0413FBD8A5B5EDC5C9460','087CE841726B43209439B09E87AE8C48') AND
            DT_JSSJ is NULL
        )b
        WHERE b.num=2
    )
    UPDATE t2 SET t2.dt_jssj = t1.dt_kssj FROM(
        SELECT * FROM(
            SELECT 
                ROW_NUMBER() OVER ( partition by C_BH_ZFXX ORDER BY DT_KSSJ DESC) as num ,
                C_BH_ZFXX,
                DT_KSSJ,
                DT_JSSJ,
                C_BH
                FROM DB_JY..T_FJFY_FJJL 
            WHERE
            --    c_bh_zfxx  in( '046B7C4311C0413FBD8A5B5EDC5C9460','087CE841726B43209439B09E87AE8C48') AND
                 DT_JSSJ is NULL
            ) a WHERE a.num = 1
    ) t1
    WHERE 
    t1.C_BH_ZFXX = t2.C_BH_ZFXX
    View Code

     2. 将查询结果插入到新的表中

    --将查询的结果插入到表中
    INSERT INTO T_ZF_XMPY_STR(C_ID, C_BH_ZFXX, C_XMBH) 
    SELECT REPLACE(NEWID(), '-', ''), C_BH_ZFXX, C_XMBH FROM V_CQ_XMPY
    
    -- 将查询到的结果插入到表中(自动创建student3表)
    select * into student3 from student1 where ID<8 

    3.创建/更新存储过程

    USE DB_JJ;
    
    -- =============================================
    -- Author:        <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:     
    -- =============================================
     if (exists (select * from sys.objects where name = 'PR_1'))
        drop proc PR_1
    GO
    
    create  PROCEDURE [dbo].[PR_1]
            @VAR_KSRQ            VARCHAR(32),            --开始日期
            @VAR_JSRQ            VARCHAR(32),            --结束日期
    as  
    begin    
        ...
    end
    View Code

    4.创建/更新视图

    USE DB_JJ
    GO
    --判断视图是否存在
    IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_GJ]'))
        DROP VIEW [dbo].[V_GJ]
    GO
    CREATE VIEW [dbo].[V_GJ] AS
    SELECT
        t1.C_BH AS C_BH_t1.X,
        CASE
            --中国籍(含港澳台)
            WHEN (t1.N_GJ IN ( 1,2,3,4 ) ) THEN 1
            --国籍不明
            WHEN ( t1.N_GJ IS NULL OR t1.N_GJ in (99)) THEN 2
            --外国籍
            ELSE 3
        END AS V_GJ 
    FROM
        DB_JJ.dbo.table1 t1
    View Code 

    5.插入数据

    DELETE FROM [DB_JJ].[dbo].[table1] WHERE C_PID='308';
    INSERT INTO [DB_JJ].[dbo].[table1] ( [C_PID], [C_Code], [C_Name])  VALUES ( 
    '308', '2', '省外');

    6.增加表格的列

    USE DB_JJ;
    
    -- 增加终止日期D_ZZRQ列
    if not exists (select 1 from DB_JJ.information_schema.columns 
    where table_name='table1' and column_name='D_ZZRQ')
        alter table table1 add D_ZZRQ date;
    GO
    IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'MS_Description' ,
        N'SCHEMA',N'dbo', N'TABLE',N'table1', N'COLUMN',N'D_ZZRQ'))
        EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'终止日期'
        , @level0type = 'SCHEMA', @level0name = N'dbo'
        , @level1type = 'TABLE', @level1name = N'table1'
        , @level2type = 'COLUMN', @level2name = N'D_ZZRQ';
        
    View Code

     7.创建表格

    USE DB_JJ
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'[dbo].[table1]') AND type in (N'U')) 
        CREATE TABLE table1(
            C_ID VARCHAR(32) NOT NULL,
            C_BH_ZFXX VARCHAR(32),
            D_BDRQ DATE,  --变动日期
            N_HYZK INT, --婚姻状况
            C_BZ VARCHAR(900), --备注
            C_DJR VARCHAR(32),  --登记人
            DT_CJSJ DATETIME,  --创建时间
        );
    View Code

     8. 创建索引【参考:https://www.cnblogs.com/soundcode/p/4458974.html

    语法:
    CREATE [索引类型] INDEX 索引名称
    ON 表名(列名)
    WITH FILLFACTOR = 填充因子值0~100
    GO
    
    /*实例*/
    USE DB_ZX; --使用哪个数据库
    
    GO
    IF EXISTS (SELECT * FROM SYSINDEXES WHERE NAME='I_JXJS_XFBDJL_BDLB')--检测该索引是否已经存在
    DROP INDEX T_JXJS_XFBDJL.I_JXJS_XFBDJL_BDLB;--如果存在则删除
    
    --创建索引
    CREATE NONCLUSTERED INDEX I_JXJS_XFBDJL_BDLB --创建一个非聚集索引
    ON T_JXJS_XFBDJL(N_BDLB)  --为T_JXJS_XFBDJL表的N_BDLB字段创建索
    
    GO
    
    --指定按‘I_JXJS_XFBDJL_BDLB’索引查询
    --SELECT * FROM T_JXJS_XFBDJL WITH(INDEX=I_JXJS_XFBDJL_BDLB) WHERE N_BDLB = 9; 
    SELECT * FROM T_JXJS_XFBDJL WITH(INDEX(I_JXJS_XFBDJL_BDLB)) WHERE N_BDLB = 9; 
    View Code

     9. 递归查询

    ALTER PROCEDURE dept_level 
        @root_id VARCHAR(50)  
    AS
    BEGIN
          with temp(c_id, c_pid, c_name, c_corp, curLevel)
            as
            (
                    --1:初始查询(这里的PID=-1 在我的数据中是最底层的根节点)
                    select c_id, c_pid, c_name, c_corp, 1 as level from DB_JY..T_SYS_DEPT
                    where c_id = @root_id     
                    union all
                    --2:递归条件
                    select a.c_id, a.c_pid, a.c_name,  a.c_corp, b.curLevel+1 from DB_JY..T_SYS_DEPT a   --3:这里的临时表和原始数据表都必须使用别名,不然递归的时候不知道查询的是那个表的列
                    inner join temp b
                    on  a.c_pid = b.c_id  --这个关联关系很重要,一定要理解一下谁是谁的父节点, a子表,b父表
            )
            select * from temp   --4:递归完成后 一定不要少了这句查询语句 否则会报错
             
    END
    View Code
  • 相关阅读:
    《WINDOWS编程启示录》第三章
    PowerDesigner 工具生成数据库Report指导
    周末感想一则
    自己写一个BUG管理工具
    Visual Studio.net 2008开发ActiveX过程与总结
    CBS项目总结中一张活动图的一点思考
    写一篇日志,记录被我整崩溃的电脑
    6 important .NET concepts: Stack, heap, Value types, reference types, boxing and Unboxing
    Visual Studio.net 2010 Windows Service 开发,安装与调试
    GameCard Refactoring Solution
  • 原文地址:https://www.cnblogs.com/shiyun32/p/10019525.html
Copyright © 2011-2022 走看看