本文主要講述了數(shù)據(jù)庫快照,自定義函數(shù)與計算列的標(biāo)準(zhǔn)概念,詳細(xì)內(nèi)容請參考下文:
1.數(shù)據(jù)庫快照
數(shù)據(jù)庫快照可以理解為保存某個數(shù)據(jù)庫在快照那一瞬間的狀態(tài)??煺蘸蛡浞菰碛兴町?但是功能有一點(diǎn)相同那就是可以將數(shù)據(jù)還原為備份的那個時刻.快照的原理是新建一個數(shù)據(jù)庫指針,在原數(shù)據(jù)庫沒有變化的情況下快照是不占用空間的,而數(shù)據(jù)庫發(fā)生了變化,那么在變化前,被修改的數(shù)據(jù)頁會先復(fù)制一份到快照文件中,然后再對原數(shù)據(jù)頁進(jìn)行修改.顯然這樣做的好處就是比備份數(shù)據(jù)庫占用空間小.快照是只讀的,大家也可以直接在SQL語句中把他當(dāng)數(shù)據(jù)庫用:
use snap1;--使用快照
select * from table1
與此同時也可以實現(xiàn)數(shù)據(jù)還原功能,在導(dǎo)入數(shù)據(jù)的時候把數(shù)據(jù)源選成快照就可以了。
快照的建立似乎不可以在ManagementStudio通過點(diǎn)鼠標(biāo)完成,只有通過SQL語句來做,如下例:
create database snap2
on
( name= DB1,
filename= 'c:\abc.mdf')
as snapshot of DB1
這兒snap2當(dāng)然就是快照名,而name=DB1這兒的DB1是指要被快照的數(shù)據(jù)庫的數(shù)據(jù)文件邏輯名稱.
一個數(shù)據(jù)庫的邏輯名稱可以通過右鍵某數(shù)據(jù)庫->屬性,"文件"選項卡中可以看到.
filename='...'這是指快照文件放在哪個位置.最后那個DB1就是指要被快照的數(shù)據(jù)庫了.
注意:數(shù)據(jù)庫被快照以后是無法刪除的.要刪除數(shù)據(jù)庫必須先把該數(shù)據(jù)庫的所有快照刪除.
2.自定義函數(shù)
在數(shù)據(jù)庫->可編程性->函數(shù)->標(biāo)量值函數(shù)中可以定義用戶自己的函數(shù).
右鍵"新建標(biāo)量值函數(shù)"后會調(diào)用新建函數(shù)的模版,按Ctrl+Shift+M可以為模版中各參數(shù)賦值.然后在Begin End中間寫入自己的SQL語句.
比如我們有一個通過生日計算年齡的函數(shù)GetAge();以下是寫出來的代碼:
CREATE FUNCTION [dbo].[GetAge]
(
@birthday datetime
)
RETURNS int
AS
BEGIN
DECLARE @Result int
DECLARE @Now datetime
set @Now=getdate();
SELECT @Result= DATEDIFF(yy,@birthday,@Now)
RETURN @Result
END
在編寫完代碼后,我們直接按F5運(yùn)行就可以將編寫的函數(shù)保存到數(shù)據(jù)庫中.調(diào)用自定義函數(shù)也很簡單,和一般的函數(shù)用法一樣不過就是前面必須跟架構(gòu)名,也就是說要寫成dbo.GetAge,而不能直接寫GetAge。
下面讓我們新建一個查詢來測試一下:
select dbo.GetAge('1984/10/10')
返回22,函數(shù)編寫成功。
3.計算列
大家需要了解的是,在數(shù)據(jù)庫表設(shè)計的時候,有一個比較特殊的列不填寫任何設(shè)計類型,用戶不可以改變該列的值,它就是計算列。
計算列的值是通過一定的函數(shù)公式等以另一個或多個列的值為輸入值,計算出結(jié)果。
打開表或在新建表的時候,在列屬性下面就有"計算所得的列規(guī)范"項,在"公式"中填入需要的公式便完成計算列的設(shè)計.
比如我們有一個表,表中有字段Birthday(datetime類型),那么我們再新建一個列為Age,在公式中填入(isnull([dbo].[GetAge]([Birthday]),(0)))然后保存便可以了。這個時候打開表中數(shù)據(jù)就可以看到Age字段已經(jīng)全部顯示出來了.
注:在計算列中是不能直接寫比較復(fù)雜的邏輯的,一般需要結(jié)合自定義函數(shù)和計算列,這樣就可以完成各種復(fù)雜的邏輯了。
1.數(shù)據(jù)庫快照
數(shù)據(jù)庫快照可以理解為保存某個數(shù)據(jù)庫在快照那一瞬間的狀態(tài)??煺蘸蛡浞菰碛兴町?但是功能有一點(diǎn)相同那就是可以將數(shù)據(jù)還原為備份的那個時刻.快照的原理是新建一個數(shù)據(jù)庫指針,在原數(shù)據(jù)庫沒有變化的情況下快照是不占用空間的,而數(shù)據(jù)庫發(fā)生了變化,那么在變化前,被修改的數(shù)據(jù)頁會先復(fù)制一份到快照文件中,然后再對原數(shù)據(jù)頁進(jìn)行修改.顯然這樣做的好處就是比備份數(shù)據(jù)庫占用空間小.快照是只讀的,大家也可以直接在SQL語句中把他當(dāng)數(shù)據(jù)庫用:
use snap1;--使用快照
select * from table1
與此同時也可以實現(xiàn)數(shù)據(jù)還原功能,在導(dǎo)入數(shù)據(jù)的時候把數(shù)據(jù)源選成快照就可以了。
快照的建立似乎不可以在ManagementStudio通過點(diǎn)鼠標(biāo)完成,只有通過SQL語句來做,如下例:
create database snap2
on
( name= DB1,
filename= 'c:\abc.mdf')
as snapshot of DB1
這兒snap2當(dāng)然就是快照名,而name=DB1這兒的DB1是指要被快照的數(shù)據(jù)庫的數(shù)據(jù)文件邏輯名稱.
一個數(shù)據(jù)庫的邏輯名稱可以通過右鍵某數(shù)據(jù)庫->屬性,"文件"選項卡中可以看到.
filename='...'這是指快照文件放在哪個位置.最后那個DB1就是指要被快照的數(shù)據(jù)庫了.
注意:數(shù)據(jù)庫被快照以后是無法刪除的.要刪除數(shù)據(jù)庫必須先把該數(shù)據(jù)庫的所有快照刪除.
2.自定義函數(shù)
在數(shù)據(jù)庫->可編程性->函數(shù)->標(biāo)量值函數(shù)中可以定義用戶自己的函數(shù).
右鍵"新建標(biāo)量值函數(shù)"后會調(diào)用新建函數(shù)的模版,按Ctrl+Shift+M可以為模版中各參數(shù)賦值.然后在Begin End中間寫入自己的SQL語句.
比如我們有一個通過生日計算年齡的函數(shù)GetAge();以下是寫出來的代碼:
CREATE FUNCTION [dbo].[GetAge]
(
@birthday datetime
)
RETURNS int
AS
BEGIN
DECLARE @Result int
DECLARE @Now datetime
set @Now=getdate();
SELECT @Result= DATEDIFF(yy,@birthday,@Now)
RETURN @Result
END
在編寫完代碼后,我們直接按F5運(yùn)行就可以將編寫的函數(shù)保存到數(shù)據(jù)庫中.調(diào)用自定義函數(shù)也很簡單,和一般的函數(shù)用法一樣不過就是前面必須跟架構(gòu)名,也就是說要寫成dbo.GetAge,而不能直接寫GetAge。
下面讓我們新建一個查詢來測試一下:
select dbo.GetAge('1984/10/10')
返回22,函數(shù)編寫成功。
3.計算列
大家需要了解的是,在數(shù)據(jù)庫表設(shè)計的時候,有一個比較特殊的列不填寫任何設(shè)計類型,用戶不可以改變該列的值,它就是計算列。
計算列的值是通過一定的函數(shù)公式等以另一個或多個列的值為輸入值,計算出結(jié)果。
打開表或在新建表的時候,在列屬性下面就有"計算所得的列規(guī)范"項,在"公式"中填入需要的公式便完成計算列的設(shè)計.
比如我們有一個表,表中有字段Birthday(datetime類型),那么我們再新建一個列為Age,在公式中填入(isnull([dbo].[GetAge]([Birthday]),(0)))然后保存便可以了。這個時候打開表中數(shù)據(jù)就可以看到Age字段已經(jīng)全部顯示出來了.
注:在計算列中是不能直接寫比較復(fù)雜的邏輯的,一般需要結(jié)合自定義函數(shù)和計算列,這樣就可以完成各種復(fù)雜的邏輯了。