sql server關于函數(shù)中如何使用Getdate()
create view v_getdateasselect getdate() [output]go---------------------------------------------------------------create function f_getdate()returns datetimeasbegindeclare @n datetimeselect @n = output from v_getdatereturn(@n)endgo---------------------------------------------------------------
調用:select dbo.f_getdate()
======================================================================-----以下是解析--------應為function內部不允許使用函數(shù)可以是確定的或不確定的。如果任何時候用一組特定的輸入值調用函數(shù)時返回的結果總是相同的,則這些函數(shù)為確定的。如果每次調用函數(shù)時即使用的是相同的一組特定輸入值,返回的結果總是不同的,則這些函數(shù)為不確定的。
不確定的函數(shù)會產(chǎn)生副作用。副作用是更改數(shù)據(jù)庫的某些全局狀態(tài),比如更新數(shù)據(jù)庫表或某些外部資源,如文件或網(wǎng)絡等(例如,修改文件或發(fā)送電子郵件消息)。
不允許在用戶定義函數(shù)主體中內置不確定函數(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ù)在調用擴展存儲過程時仍會產(chǎn)生副作用。
由于擴展存儲過程會對數(shù)據(jù)庫產(chǎn)生副作用,因此調用擴展存儲過程的函數(shù)是不確定的。當用戶定義函數(shù)調用會對數(shù)據(jù)庫產(chǎn)生副作用的擴展存儲過程時,不要指望結果集保持一致或執(zhí)行函數(shù)。
