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
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
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
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';
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, --创建时间 );
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;
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现