--我们就以院系,班级,学生来举例。
create TABLE [dbo].YuanXi
(
Id int IDENTITY(,) NOT NULL,--学校id 自增量
YuanXiName varchar() null, --院系名字 )
create TABLE [dbo].Class
(
Id int IDENTITY(,) NOT NULL,--班级id 自增量
YuanXiID int null,--院系id
ClassName varchar() null --班级名字 )
create TABLE [dbo].Student
(
Id int IDENTITY(,) NOT NULL,--学生id 自增量
ClassID int null,--班级id
StudentName varchar() null,--学生姓名
)
--这个表是图片表,我临时加的,后面可能用这个演示
create TABLE [dbo].PathImg
( Id int IDENTITY(,) NOT NULL,--学校id 自增量
TableName varchar() null, --这个是表明,比如我要在信息工程学院价格图片,那就要在改表中把XuanXi表的表名子加上,还有信息工程学院的id加上
TableNameId int null,--这个就是某一个表中的某一个id
Path varchar() null, --存放班级照片路径的
)

改就相对的容易多了,因为修改的时候主键一定不会变的(也就是表中的自增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

整理一下写个存储过程

USE [TestData]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO ALTER PROCEDURE [dbo].[alterDemo]
@TableName varchar(30)--字符串表名 @TabaleNameID int--表名id AS
--定义两个个变量,用来接收当前步骤数和完成该任务的总步骤数
declare @CurrentStepCount int
declare @SumStepCount int
--查询当前记录数,并赋值给变量
set @CurrentStepCount=(select count(*) from Step where TableName=@TableName and TableNameID=@TableNameID)
--查询完成该任务的总步骤数,并赋值给变量
--注意红字,这个变量的定义一定要放在字符里面,如果像前两个一样放在外面,执行这个语句就会报错的,一定要注意
set @SumStepCount=EXEC('delcare @TaskMoBanID varchar(30) SELECT @TaskMoBanID=TaskMoBanID FROM ' +@TableName+'where Id ='+@TableNameID+'select MoBanStepCount from taskMoBan where Id=@TaskMoBanID')
if @CurrentStepCount<@SumStepCount
update Task set TaskMoBanID=2 where Id=@TableNameID
else
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. 五 RequestMapping的使用

    1 设置路径映射为数组,在Controller类中一个方法对应多个映射路径,可以被多个url访问 2 分目录管理,在Controller类上添加Request Mapping注解,url访问必须添加相 ...

  2. Vue 项目开发

    目录 Vue 项目开发 项目目录结构解析 入口文件 main.js (项目入口) 根组件 app.vue index.html 文件入口 router 路由 components 子组件 项目初始化 ...

  3. Java异常的限制

    Java异常的限制 我在看JAVA编程思想,讲到异常的限制,看的代码和解释,非常的难看下去,直接写了他的代码. java编程思想关于异常限制的逻辑 它以棒球比赛为例子. 定义了Inning(一局比赛) ...

  4. 标准模板库中的链表(list)

    //C++数据结构与算法(第4版) Adam Drozdek 著  徐丹  吴伟敏<<清华大学出版社>> 头文件:include<list> list() 创建一个 ...

  5. struts2--action请求与Action类

    1.action:代表一个sturts2的请求: 2.Action类:能够处理Struts2请求的类: --属性名必须遵守与JavaBean属性名相同的命名规则: --属性的类型可以使任意类型.从字符 ...

  6. [LuoguP1025][数据加强]数的划分

    原题连接:Click 加强数据:Click Solution 参考博客:Click 题目意思非常明确了,这是一道组合数学的题目.我就直接讲dp解法了. dp 题意可以转化为将\(n\)个苹果放进\(k ...

  7. 【STM32H7教程】第53章 STM32H7的LTDC应用之汉字小字库和全字库制作

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第53章       STM32H7的LTDC应用之汉字小字库 ...

  8. 使用EasyUI中Tree

    easyui里面的加载tree的两种方式 第一种: 使用EasyUI中Tree 符合EasyUI中Tree的Json格式,我们先看一下,格式是如何的 [{ , "text":&qu ...

  9. Lesson 48 Planning a share portfolio

    How does the older investor differ in his approach to investment from the younger investor? There is ...

  10. 二十 Filter&自动登录功能

    Filter过滤器 过滤器,其实就是对客户端发出来的请求进行过滤,浏览器发出,然后服务器用Servelt处理.在中间就可以过滤,起到的是拦截的作用. 不仅仅作用于客户端请求,而且过滤服务器响应 作用: ...