學習T SQL時記錄的筆記,記得並不全也不詳細 <! more if和while語句 自定義函數 分為標量函數、表值函數(內聯表值函數和多語句表值函數) 標量函數:只返回一個基礎類型數據的值 表值函數:返回一個table類型的結果集 內聯表值函數 多語句表值函數 多語句表值函數可以看作是標量函數和內 ...
學習T-SQL時記錄的筆記,記得並不全也不詳細
if和while語句
declare @age int
select @age = DATEDIFF(year,stuAge,getdate()) from TbStudent where stuName = '孫悟空'
if(@age>=18)
begin --必須有begin..end
print N'已成年'
end
else
begin
print N'未成年'
end
declare @sum int
set @sum = 0
declare @i int
set @i = 1
while(@i <= 100)
begin
if(@i % 2 <> 0)
begin
set @sum = @sum + @i
end
set @i = @i + 1
end
print @sum
自定義函數
分為標量函數、表值函數(內聯表值函數和多語句表值函數)
標量函數:只返回一個基礎類型數據的值
-- 語法
create function 函數名
([參數列表]) 可以不寫參數,先寫變數名再寫類型
returns 返回值類型
as
begin
-- ······函數體語句
return 返回值
end
表值函數:返回一個table類型的結果集
內聯表值函數
-- 語法
create function 函數名
([參數名])
returns table
as
return (一條select語句)
多語句表值函數
多語句表值函數可以看作是標量函數和內聯表值函數的結合體
-- 語法
create function 函數名([參數列表])
returns 表變數名 table
(表變數的欄位定義)
as
begin
SQL
return 這裡啥都不寫
end
註意
- SQL自定義函數必須有返回值
- 在自定義函數中不允許修改基表內容(即,不能用insert,update,delete)
- 如果有多個參數,每個參數一之間用逗號隔開
- 調用函數時,函數名前要加dbo.
存儲過程
存儲過程時存儲在伺服器上的一組T-SQL語句的集合,用來完成一個特定功能。
分為系統存儲過程(系統自帶)和自定義存儲過程
自定義存儲過程
-- 語法
create procedure(或proc) 存儲過程名(up_)
[參數列表] --這裡的參數列表不能使用圓括弧
begin
存儲過程代碼
end
註意:
- 存儲過程可以沒有返回值
- 存儲過程不適用return語句帶回返回值,如果有返回值,直接使用select語句返回
索引
- 索引:創建在表上
- 作用: 加快檢索速度
- 全表掃面
- 索引分為聚集索引和非聚集索引
- 聚集索引: 在一個數據表中,只能創建一個聚集索引
- 主鍵會預設創建一個聚集索引
- 在你經常使用where的欄位上添加非聚集索引
- 缺點:占用額外的存儲空間,有可能降低insert、update、delete的速度
事務
事務時併發控制的單位,他是用戶定義的一個操作,這些操作要麼都做要麼都不做,不可分割。
分為:SQL Server事務和ADO.NET事務
-- 語法
begin tran --開始一個事務操作
commit tran --提交
rollback --回滾
C#中使用時,通常把事務的操作封裝到存儲過程中
觸發器
- 觸發器是一種特殊的存儲過程
- 只不過這個存儲過程是不允許顯示調用的
- 他只能在做了特定事件後,自動觸發做出響應的
- 兩張臨時數據表:inserted、deleted
- 只能在觸發器中訪問
- 觸發器是附著在一張表上的
-- 語法
create trigger 觸發器名字
on 表名
after(或for) 之後觸發 / instead of 之前觸發 [insert/delete/update]
as
begin
-- ······
end
觸發器的觸發條件:insert,delete,update
create trigger tr_Bank_insert
on Bank
after insert
as
begin
print '往Bank表中插入了記錄'
end
create trigger tr_Bank_Delete
on Bank
after delete
as
begin
declare @id int
declare @userName nvarchar(8)
declare @userMoney int
select @id = id, @userMoney = userMoney, @userName = userName from deleted
insert into BankBak values(@id, @userName, @userMoney)
end
select * from Bank
select * from BankBak
delete from Bank where id = 3
SQL Server的觸發器是表級觸發器,表上一次性的多次操作只觸發一次