SQL Server 觸發器和儲存過程的使用

2021-10-24 03:24:44 字數 4044 閱讀 8862

建立資料庫表

create

table t_users

(id int(8

)not

null

auto_increment

primary

key,

--主鍵id

user_id varchar(10

),--使用者編號

user_name varchar(25

),--使用者姓名

user_age int(4

),--使用者年齡

user_*** varchar(2

),--使用者性別

user_phone varchar(11

),--手機號碼

create_time varchar(50

)--建立時間

)

使用觸發器實現新增使用者時自動生成使用者編號,共8位長度,例如:00000001

create

trigger

[dbo]

.[tr_user_id]

on[dbo]

.[t_users]

after

insert

--在插入資料之後

declare

--定義變數

@idint

,@userid

varchar(10

),@useridmax

varchar(10

),@counts

intbegin

declare c_set cursor

forselect id from inserted;

--建立游標

open c_set --開啟游標

fetch

next

from c_set into

@id;

select

@useridmax=(

select

max(user_id)

from t_users)

;--查詢最大編號

set@counts

=@useridmax+1

;--最大值+1

set@userid

=right

('0000000'

+ ltrim(

@counts),

8);--不足8位補0

update t_users set user_id =

@userid

where id =

@id;

fetch

next

from c_set into

@idclose c_set;

--關閉游標

deallocate c_set;

--刪除游標引用

end;

使用儲存過程對使用者編號進行重新賦值,間隔100.例如:第乙個人編號為1,第二個人編號為101

create

proc pr_user_userid

asdeclare

--定義變數

@idint

,@userid

intbegin

set@count=1

;declare

@cursor

cursor

set@cursor

=cursor

forselect id from t_users

open

@cursor

fetch

next

from

@cursor

into

@id;

while

(@@fetch_status=0

)begin

update t_users set user_id =

@userid

where id =

@id;

set@userid+=

100;

fetch

next

from

@cursor

into

@id;

end;

close

@cursor

deallocate

@cursor

end;

使用儲存過程按規定格式自動生成建立時間,並輸出1例如:2020.08.31

create

proc pr_insert_time

--引數

@idint

,@returnvalue

int output --輸出值

asdeclare

--變數

@year

varchar(8

),@month

varchar(8

),@day

varchar(8

),@date

varchar(10

)begin

select

@year=(

select datename(

year

, getdate())

asyear);

--當前年份

select

@month=(

select datename(

month

, getdate())

asmonth);

--當前月份

select

@day=(

select datename(

day, getdate())

asday);

--當前日

set@month

=right

('0'

+ ltrim(

@month),

2);set

@day

=right

('0'

+ ltrim(

@day),

2);set

@date

= ltrim(

@year)+

'.'+ ltrim(

@month)+

'.'+ ltrim(

@day);

update t_users set create_time =

@date

where id =

@id;

set@returnvalue=1

;end

;

觸發器呼叫儲存過程

--無引數也無返回值

exec pr_user_userid;

--有引數有返回值

exec pr_insert_time @id

=@id

,@returnvalue

=@returnvalue output --多個引數用,分割

變數賦值set和select區別

區別set

select

同時對多個變數賦值

不支援支援

表示式返回多個值時

出錯將返回的最後乙個值賦給變數

表示式未返回值時

變數被賦null值

變數保持原值

拓展(sql查詢當前時間)

select getdate() as 『當前日期』,

datename(year,getdate()) as 『年』,

datename(month,getdate()) as 『月』,

datename(day,getdate()) as 『日』,

datename(dw,getdate()) as 『星期』,

datename(week,getdate()) as 『週數』,

datename(hour,getdate()) as 『時』,

datename(minute,getdate()) as 『分』,

datename(second,getdate()) as 『秒』

SqlServer觸發器 儲存過程和函式

sqlserver 觸發器 觸發器中的臨時表 inserted 存放進行insert和update 操作後的資料 deleted 存放進行delete 和update操作前的資料 建立觸發器 create trigger user onupdate on st user for update asd...

SQL Server 儲存過程與觸發器

定義 是一組為了完成特點功能的sql語句集,經編譯後儲存在資料中。包含 程式流 邏輯 對資料庫的查詢 建立儲存過程 create procedure 名稱 assql statement n 在可程式設計性中可以找到 exec 名稱 呼叫儲存過程 recompile encryption 加密 定義...

SQL Server觸發器和事務

新增和刪除觸發器 alter trigger tri tc on t c for insert,delete asbegin set xact abort on declare insertcount int declare deletecount int declare updatecount i...