sql server關(guān)于函數(shù)中如何使用Getdate()
create view v_getdateasselect getdate() [output]go---------------------------------------------------------------create function f_getdate()returns datetimeasbegindeclare @n datetimeselect @n = output from v_getdatereturn(@n)endgo---------------------------------------------------------------
調(diào)用:select dbo.f_getdate()
======================================================================-----以下是解析--------應(yīng)為function內(nèi)部不允許使用函數(shù)可以是確定的或不確定的。如果任何時(shí)候用一組特定的輸入值調(diào)用函數(shù)時(shí)返回的結(jié)果總是相同的,則這些函數(shù)為確定的。如果每次調(diào)用函數(shù)時(shí)即使用的是相同的一組特定輸入值,返回的結(jié)果總是不同的,則這些函數(shù)為不確定的。
不確定的函數(shù)會(huì)產(chǎn)生副作用。副作用是更改數(shù)據(jù)庫(kù)的某些全局狀態(tài),比如更新數(shù)據(jù)庫(kù)表或某些外部資源,如文件或網(wǎng)絡(luò)等(例如,修改文件或發(fā)送電子郵件消息)。
不允許在用戶定義函數(shù)主體中內(nèi)置不確定函數(shù);這些不確定函數(shù)如下:
@@CONNECTIONS @@TOTAL_ERRORS @@CPU_BUSY @@TOTAL_READ @@IDLE @@TOTAL_WRITE @@IO_BUSY GETDATE @@MAX_CONNECTIONS GETUTCDATE @@PACK_RECEIVED NEWID @@PACK_SENT RAND @@PACKET_ERRORS TEXTPTR @@TIMETICKS
盡管在用戶定義函數(shù)主體中不允許有不確定函數(shù),這些用戶定義函數(shù)在調(diào)用擴(kuò)展存儲(chǔ)過程時(shí)仍會(huì)產(chǎn)生副作用。
由于擴(kuò)展存儲(chǔ)過程會(huì)對(duì)數(shù)據(jù)庫(kù)產(chǎn)生副作用,因此調(diào)用擴(kuò)展存儲(chǔ)過程的函數(shù)是不確定的。當(dāng)用戶定義函數(shù)調(diào)用會(huì)對(duì)數(shù)據(jù)庫(kù)產(chǎn)生副作用的擴(kuò)展存儲(chǔ)過程時(shí),不要指望結(jié)果集保持一致或執(zhí)行函數(shù)。
