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ù)可以是確定的或不確定的。如果任何時候用一組特定的輸入值調(diào)用函數(shù)時返回的結(jié)果總是相同的,則這些函數(shù)為確定的。如果每次調(diào)用函數(shù)時即使用的是相同的一組特定輸入值,返回的結(jié)果總是不同的,則這些函數(shù)為不確定的。
不確定的函數(shù)會產(chǎn)生副作用。副作用是更改數(shù)據(jù)庫的某些全局狀態(tài),比如更新數(shù)據(jù)庫表或某些外部資源,如文件或網(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)用擴展存儲過程時仍會產(chǎn)生副作用。
由于擴展存儲過程會對數(shù)據(jù)庫產(chǎn)生副作用,因此調(diào)用擴展存儲過程的函數(shù)是不確定的。當用戶定義函數(shù)調(diào)用會對數(shù)據(jù)庫產(chǎn)生副作用的擴展存儲過程時,不要指望結(jié)果集保持一致或執(zhí)行函數(shù)。
