1. 程式人生 > >2017-3-16 Tsql基礎編程 存儲過程 觸發器 級聯刪除

2017-3-16 Tsql基礎編程 存儲過程 觸發器 級聯刪除

自動 core primary 常用 prim ted 提示 mage 存儲過程

1.定義變量:

  declare @變量名 數據類型

變量賦值:

  set @變量名 = 值; select @變量名 = 值;(常用)

取值打印:

  select @變量名 print @變量名

要執行變量賦值取值的時候代碼要一起執行,不能分句執行:

declare @aa int ;
select @aa = 11;
select @aa;

打印結果:

技術分享

2.分支語句:

  if @a>@b

  begin

  語句

  end

  else

  begin

    語句

  end

  declare @a int;
  declare @b int;
  select @a=1;
  select @b=2;
  if @a>@b
  begin
    select ‘a比b大‘;
  end
  else
  begin
    select ‘b比a大‘;
  end

輸出結果:b比a大

3.循環語句:

  declare @a int ;

  select @a=1;

  while(@a<10)
  begin

   select @a

  end  

declare @aa int;--定義變量
select @aa=1;--賦值
while @aa<10
begin
select @aa;--打印
select @[email protected]+1;--給變量重新賦值
end

4.存儲過程:

相當於函數,四要素,輸入,輸出,函數體,函數名

create proc jiafa --無返回值
@bb int, --第一個參數
@cc int --第二個參數
as
return @[email protected]

/* */;

declare @bbb int; --定義一個變量接受和
exec @bbb = jiafa 10,20; --2個數相加
select @bbb; --打印結果

5.觸發器

  一個特殊的存儲過程,沒辦法調用它,而是通過增刪改的動作來實現

  一個表的一個動作只能有一個觸發器

格式:

  create trigger 哪個表的那個動作

  on 表名 ---- 針對於哪一個表寫的觸發器

  for 動作   ---- 針對於哪一個動作觸發之後的觸發器

或者 instead of ---- 針對於哪一個動作執行替換

  as

    觸發器內容 

  例子:

--1. 給score表創建觸發器,刪除內容之後自動查詢表中剩余的內容

create trigger Score_delete
on score
for delete
as
select * from score

delete from score where sno=‘103‘

--2 給score表創建觸發器,將要刪除的內容替換成查詢

create trigger score_delete
on score
instead of delete ----instead of 將要刪除的內容替換成as後面的語句
as
select * from score

delete from score where sno=‘105‘

--3 給score表建立觸發器,將要刪除的內容攔截,並將刪除的內容展示出來

create trigger score_delete
on score
instead of delete
as
select * from deleted ---deleted攔截觸發器的內容,將要刪除課程號為105的內容給展示出來

delete from score where sno=‘105‘

--4 攔截刪除的數據,並且進行提醒,不能刪除

create trigger score_delete
on score
instead of delete
as
declare @aa nvarchar(50); --聲明變量
select @aa = sno from deleted; --給變量賦值,將刪除的sno賦值給變量
if @aa=‘105‘
begin
select ‘不能刪除此數據‘ --如果是105提示此數據不能刪除
end
else
begin
delete from score where [email protected]; --如果不是限制數據可以刪除
end

delete from score where sno=‘105‘

6.級聯刪除

//創建2個表 用戶表 班級表
create table Users
(
ids nvarchar(50) primary key,
Name nvarchar(50) ,
Class nvarchar(50)
)
create table Class
(
ClassCode nvarchar(50) primary key,
ClassName nvarchar(50)

)
insert into Class values(‘c001‘,‘一班‘)
insert into Class values(‘c002‘,‘二班‘)
insert into Class values(‘c003‘,‘三班‘)
insert into Class values(‘c004‘,‘四班‘)
insert into Users values(‘1‘,‘鍵盤‘,‘c001‘)
insert into Users values(‘2‘,‘鼠標‘,‘c002‘)
insert into Users values(‘3‘,‘李三‘,‘c003‘)
insert into Users values(‘4‘,‘趙四‘,‘c004‘)

//創建觸發器---級聯刪除
create trigger Class_delete
on class
instead of delete
as
declare @aa nvarchar(50);
select @aa = classcode from class;
delete from users where [email protected];
delete from class where [email protected];
[email protected]
delete from Class where ClassCode=‘c004‘
select * from Class

2017-3-16 Tsql基礎編程 存儲過程 觸發器 級聯刪除