Sqlserver 增刪改查 改

2022-03-14 23:28:56 字數 4184 閱讀 2844

--我們就以院系,班級,學生來舉例。

create table [dbo].yuanxi

( id

int identity(1,1) not null,--學校id 自增量

yuanxiname varchar(

50) null, --院系名字

)create table [dbo].class

( id

int identity(1,1) not null,--班級id 自增量

yuanxiid

intnull,--院系id

classname varchar(

50) null --班級名字

)create table [dbo].student

( id

int identity(1,1) not null,--學生id 自增量

classid

intnull,--班級id

studentname varchar(

50) null,--學生姓名

)--這個表是表,我臨時加的,後面可能用這個演示

create table [dbo].pathimg

(

id int identity(1,1) not null,--學校id 自增量

tablename varchar(

50) null, --這個是表明,比如我要在資訊工程學院**,那就要在改表中把xuanxi表的表名子加上,還有資訊工程學院的id加上

tablenameid

intnull,--這個就是某乙個表中的某乙個id

path varchar(

50) null, --存放班級**路徑的

改就相對的容易多了,因為修改的時候主鍵一定不會變的(也就是表中的自增id了) ,至於改其他資訊那就不會影響到其他表了,就算影響,比如我修改了yuanxi表中資訊工程學院改成藝術設計學院

因為id沒有變。如果不想編輯,那就找到班級列表對這些班級進行刪除,或批量刪除就行了,而刪除方式在我的筆記中(已經做了詳細介紹了。

比如乙個任務表,乙個任務步驟表和乙個任務模板列表,(其實還需要步驟模板表的,新增的任務屬於哪個任務模板,新增的步驟屬於哪個步驟模板,這樣才合理,但是這裡就簡化了,直接用三個表了)

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

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

goset quoted_identifier on

goalter

procedure

[dbo

].[alterdemo

]@tablename

varchar(30)--

字串表名

@tabalenameid

int--

表名id

as--

定義兩個個變數,用來接收當前步驟數和完成該任務的總步驟數

declare

@currentstepcount

intdeclare

@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=

2where id=

@tablenameid

else

update task set taskmobanid=

3where 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**了。

SQL Server 增刪改查基礎

主鍵為自增時可不填寫 插入單條資料 insert into product values 008 原子筆 辦公用品 100,null,2019 11 11 insert into product select 008 原子筆 辦公用品 100,null,2019 11 11 插入多條資料 inser...

Sql server 實現增刪改查

vs2008 c sql server csharp view plain copy using system.data.sqlclient csharp view plain copy sqlconnection conn csharp view plain copy 連線資料庫 private ...

Sqlserver 增刪改查 刪

我們就以院系,班級,學生來舉例。create table dbo yuanxi id int identity 1,1 not null,學校id 自增量 yuanxiname varchar 50 null,院系名字 create table dbo class id int identity 1...