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
原文地址:https://www.cnblogs.com/shiyun32/p/10019525.html