建立資料庫表
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...