1. --我们就以院系,班级,学生来举例。
  2. create TABLE [dbo].YuanXi
  3. (
  4. Id int IDENTITY(,) NOT NULL,--学校id 自增量
  5. YuanXiName varchar() null, --院系名字
  6.  
  7. )
  8. create TABLE [dbo].Class
  9. (
  10. Id int IDENTITY(,) NOT NULL,--班级id 自增量
  11. YuanXiID int null,--院系id
  12. ClassName varchar() null --班级名字
  13.  
  14. )
  15. create TABLE [dbo].Student
  16. (
  17. Id int IDENTITY(,) NOT NULL,--学生id 自增量
  18. ClassID int null,--班级id
  19. StudentName varchar() null,--学生姓名
  20. )
  21. --这个表是图片表,我临时加的,后面可能用这个演示
  22. create TABLE [dbo].PathImg
  23. (
  24.  
  25. Id int IDENTITY(,) NOT NULL,--学校id 自增量
  26. TableName varchar() null, --这个是表明,比如我要在信息工程学院价格图片,那就要在改表中把XuanXi表的表名子加上,还有信息工程学院的id加上
  27. TableNameId int null,--这个就是某一个表中的某一个id
  28. Path varchar() null, --存放班级照片路径的
  29. )

改就相对的容易多了,因为修改的时候主键一定不会变的(也就是表中的自增id了) ,至于改其他信息那就不会影响到其他表了,就算影响,比如我修改了YuanXi表中信息工程学院改成艺术设计学院

,虽然名字改了,但是Id没有变,可能大家会说,对应Class表中的班级不是也要改变吗,是的,是需要改变的,但是我们可以在班级列表的界面中点击编辑按钮进行编辑,重新给班级命名就i行了。

因为Id没有变。如果不想编辑,那就找到班级列表对这些班级进行删除,或批量删除就行了,而删除方式在我的笔记中(https://www.cnblogs.com/zpy1993-09/p/11786057.html)已经做了详细介绍了。

这里我要做另一种修改方式,上面的表好像没有适用场景,和上面的表没关系了。下面我要说的是我在开发中常用的一种修改方式了,这种修改时带有一定逻辑型的修改,可不是修改一张死表那么简单了。还是举个例子吧!这个例子是web平台和手机APP互相配合的。

比如一个任务表,一个任务步骤表和一个任务模板列表,(其实还需要步骤模板表的,添加的任务属于哪个任务模板,添加的步骤属于哪个步骤模板,这样才合理,但是这里就简化了,直接用三个表了)

任务表中我在表中添加一个任务,而这个任务需要做3个步骤才能算完成任务。我把这个任务分配给了张三,而张三打开手机APP就应该看到属于自己的任务了。他要做的就是把3个步骤完成,然后提交并存储到数据里的步骤表中。还是把表建起来才能看的明白:

TaskStateID:表示任务状态Id   数字代表:   1:未开始 2:处理中 3:待审核 4:已完成

TaseMoBanID:表示该任务属于哪个任务模板

具体流程:把任务派给张三,TaskStateID=1 任务未开始,如果张三完成了一部分任务,TaskStateID=2  任务已经在处理中  当张三把所有步骤都做完的时候,TaskStateID=3 任务属于待审核。 最后的审核是有任务发起者审核,如果审核通过 那么 TaskStateID=4 任务已完成

比如我任务已经派给张三了,那么TaskStateID应该是1,任务还未开始,

我们知道任务要三个步骤才能完成,张三每完成一个任务,他就要提交一次。在step表中添加步骤记录,添加这里不说,之说修改,我们这时候就应该把Task表中TaskStateID的状态修改为2处理中。但是在修改的时候数据库有不知道,你到底完成了多少步骤,他只会修改,你可能只完成1步,也可能都完成了。这就需要我们在数据库中用逻辑来判断了。

首先判断当前张三完成了多少步骤,首先提交的时候会传到数据库中两个参数;一个是 :TableName:表名     TableNameID :任务ID

我们这里直接定义方便后面写存储过程:

@TableName varchar(30)

@TabaleNameID int

1,从step表中查找记录数

select Count(*) from Step where TableName=@TableName  and  TableNameID=@TableNameID

2,查找完成该任务一共需要多少步骤。(这里要注意,这个修改是通用的。所以TableName传过来的是数据库中某一张表的表名字。是通过字符串表名来查数据库的,所以和上面的不一样,这个需要字符串拼接成sql语句了)

先找到任务模板的id

EXEC('SELECT TaskMoBanID  FROM ' +@TableName+'where Id ='+@TableNameID)  --这句sql代码翻译一下就是 执行sql语句:select TaskMoBanID from Task where Id =@TableNameID

通过任务模板id找到该任务完成需要的步骤数:

select  MoBanStepCount  from taskMoBan where Id=上一步得到ID

3,拿张三当前提交后完成了多少步骤数与完成该任务的步骤数对比(注意,张三在APP上打开步骤数的时候已经有三个步骤显示了,只是需要他去编辑完成,他不具有添加步骤的能力,步骤已经被模板限死了)

if 当前步骤数<完成该任务的步骤数

把任务状态  修改成TaskStateID=2 (处理中)

update Task set TaskMoBanID=2   where  Id=@TableNameID

else

update Task set TaskMoBanID=3  where  Id=@TableNameID

整理一下写个存储过程

  1. USE [TestData]
  2. GO
  3. SET ANSI_NULLS ON
  4. GO
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7.  
  8. ALTER PROCEDURE [dbo].[alterDemo]
  9. @TableName varchar30)--字符串表名
  10.  
  11. @TabaleNameID int--表名id
  12.  
  13. AS
  14. --定义两个个变量,用来接收当前步骤数和完成该任务的总步骤数
  15. declare @CurrentStepCount int
  16. declare @SumStepCount int
  17. --查询当前记录数,并赋值给变量
  18. set @CurrentStepCount=(select count(*) from Step where TableName=@TableName and TableNameID=@TableNameID)
  19. --查询完成该任务的总步骤数,并赋值给变量
  20. --注意红字,这个变量的定义一定要放在字符里面,如果像前两个一样放在外面,执行这个语句就会报错的,一定要注意
  21. set @SumStepCount=EXEC('delcare @TaskMoBanID varchar(30) SELECT @TaskMoBanID=TaskMoBanID FROM ' +@TableName+'where Id ='+@TableNameID+'select MoBanStepCount from taskMoBan where Id=@TaskMoBanID')
  22. if @CurrentStepCount<@SumStepCount
  23. update Task set TaskMoBanID=2 where Id=@TableNameID
  24. else
  25. update Task set TaskMoBanID=3 where Id=@TableNameID

--上面EXEC()执行的字符语句翻译普通sql语句:
delcare @TaskMoBanID varchar(30)//临时任务模板id的存储变量
SELECT @TaskMoBanID=TaskMoBanID FROM Task where Id =@TableNameID //用该变量接受查询的结果
select MoBanStepCount from taskMoBan where Id=@TaskMoBanID//根据查询的结果,再次查询模板表中该任务模板的步骤数

好了,修改就说到这里了,实际上一般都是单个表,毕竟修改的时候主键又不会变,其他影响的在平台上直接在编辑一下就行了。要么直接删除就行了,反而更省事些,但是就像上面我说的那种带有逻辑模式的,那就要老老实实的写sql代码了。

Sqlserver 增删改查----改的更多相关文章

  1. 【基础篇】js对本地文件增删改查--改

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  2. JavaWeb程序利用Servlet的对SQLserver增删改查操作

    声明:学了几天终于将增删改查的操作掌握了,也发现了一些问题,所以总结一下. 重点:操作数据库主要用的是SQL语句跟其他无关. 一:前提知识:PreparedStatement PreperedStat ...

  3. easyui+nodejs+sqlserver增删改查实现

    用到的模块或者技术: Express: http://www.expressjs.com.cn/4x/api.html#express Easyui: http://www.jeasyui.com/d ...

  4. Sqlserver 增删改查----增

    注意我说的常见查询,可不是简单到一个表得增删改查,做过实际开发得人都知道,在实际开发中,真正牵扯到一个表得增删改查只能说占很小得一部分,大多都是好几个表的关联操作的. 下面我就说一下我在实际开发中经常 ...

  5. Sqlserver 增删改查----删

    --我们就以院系,班级,学生来举例. create TABLE [dbo].YuanXi ( Id ,) NOT NULL,--学校id 自增量 YuanXiName varchar() null, ...

  6. Django 之 文件配置、pycharm及django连接数据库、创表及表的增删改查02

    目录 创建项目后的文件夹配置 静态文件配置 接口前缀动态绑定 form表单回顾 根据请求方式的不同,返回前端不同的信息 pycharm 连接MYSQL数据库 Django 连接MYSQL数据库的配置 ...

  7. 【基础篇】js对本地文件增删改查

    [基础篇] js对本地文件增删改查--增 js对本地文件增删改查--删 js对本地文件增删改查--改 js对本地文件增删改查--查

  8. 【基础篇】js对本地文件增删改查--查

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  9. 【基础篇】js对本地文件增删改查--删

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

随机推荐

  1. 代码审计(1):sql注入漏洞

    挖掘经验:sql注入经常出现在登录界面.获取HTTP请求头.订单处理等地方.而登录界面的注入现在来说大多是发生在HTTP头里面的client-ip和x-forward-for,一般用来记录登录的ip地 ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:设置元素为 display:block 并居中显示

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. LeetCode中等题(一)

    题目一: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  4. Searchable 事例

    org.springframework.data.domain.Sort: org.springframework.data.domain.Pageable: //searchable框架是封装在sp ...

  5. JavaWeb--概述

    1.Java Web应用由一组Servlet.HTML页.类以及其他可以被绑定的资源构成.它可以在何种供应商提供的实现Servlet规范的Servlet容器中运行: 2.Java Web应用中包含如下 ...

  6. Maven项目- Servlet的抽取和优化 java.lang.NoSuchMethodException 的解决方法

    优化servlet,减少servlet的数量,便于开发与维护.现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,BaseServlet的抽取和优化,相当于在数据库中一张表对应一个 ...

  7. 使用Spring Cloud Gateway保护反应式微服务(一)

    反应式编程是使你的应用程序更高效的一种越来越流行的方式.响应式应用程序异步调用响应,而不是调用资源并等待响应.这使他们可以释放处理能力,仅在必要时执行处理,并且比其他系统更有效地扩展. Java生态系 ...

  8. 090、Java中String类之判断两个int型整数是否相等

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  9. Django(十六)基于模板的登录案例:登录装饰器、csrf攻击方式及防护、ajax的Post 的csrf开启写法、生成验证码、加验证码登录、反向解析+传参

    一.csrf攻击 1.1 csrf攻击(跨站请求伪造) [csrf攻击即]:通过第3方网站,伪造请求(前提条件是你已经登录正常网站,并保存了session或cookie登录信息且没有退出),第三方网站 ...

  10. hdu 3549 Flow Problem 最大流问题 (模板题)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...