2009-11-16 105 views
1

我創建了一個UDF,用於爲列生成默認值。它很好用,但我想將另一個字段作爲參數傳遞給該函數。這可能嗎?使用UDF作爲列的默認值

例如,其中一個字段是DealerID字段,我想將DealerID字段的值傳遞到我的UDF中,因爲我將使用它來計算新值。任何幫助,將不勝感激!

回答

3

沒有,因爲會DealerID被稱爲前所需的默認值(例如插入)

編輯:

這意味着,SQL Server將在插入的時候確實沒有在表中的值,僅在那之後。因此,它不能用於默認的UDF。

例如,多行插入或NEWID()的缺省值是什麼?

現在,使用DealerID上的邏輯基礎:如果它是GUID,爲什麼?這是一個內部的,非用戶可讀的值。

如果你真的需要這個,你必須使用一個計算列作爲「基本」值,另一列使用ISNULL作爲「實際」值。

+1

我想我會想用觸發器來做,我不知道如何,有什麼建議? – Shimmy 2009-12-03 03:02:48

0

如果您有特定的原因需要使用UDF,請糾正我的錯誤,但爲什麼不直接在表DDL中定義列的默認值,如果您在您的應用程序中提供了特定值UPDATEINSERT等?在SELECT中使用UDF將導致函數每行都執行一次,如果在表定義級別處理它,則會節省一些開銷。

+0

我想做一個公式來計算默認值,這就是爲什麼我想要使用UDF。 – 2009-11-16 22:51:34

+1

一個很好的原因可能是在多租戶數據庫中,您要使用的缺省特定於擁有所插入記錄的業務/客戶。插入新文檔記錄時,您可能需要分配「未分配」文檔組ID。在當前約束下,中間層必須查找「未分配」文檔組ID,並將其包含在INSERT語句的值中。 – AlwaysLearning 2015-01-14 01:25:37

3

我有一個類似的問題,我想自動分配插入到表中的新記錄的URL段落。我採取的方法是將字段的默認值設置爲'NOTSET'(僅僅是一個文本佔位符值),然後使用插入觸發器將字段ON INSERT更新爲我的UDF值(其中字段值爲NOTSET),如下所示:

CREATE TRIGGER [dbo].[TR_MyTable_MyTriggerName] 
    ON [dbo].[tblMyTable] 
    AFTER INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Create the geography field from the lat and lon coordinates 
    UPDATE tblMyTable 
    SET fldURLSlug = dbo.UDF_MyFunction(INS.[fldRecordTitle]) 
    FROM tblMyTable MT INNER JOIN inserted INS ON MT.fldRecordId = INS.fldRecordId 
    WHERE INS.fldURLSlug = 'NOTSET' 

END 

GO