使用UDF作为列的默认值

时间:2009-11-16 19:52:47

标签: sql-server user-defined-functions

我创建了一个UDF,用于生成列的默认值。它工作得很好,但我想将另一个字段作为参数传递给函数。这可能吗?

例如,其中一个字段是DealerID字段,我想将DealerID字段的值传入我的UDF,因为我将使用它来计算新值。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:3)

不,因为在知道DealerID之前需要默认值(例如在INSERT上)

编辑:

这意味着SQL Server在插入时不会出现表中的值。因此,默认情况下不能使用UDF。

例如,多行插入怎么样,或者你有NEWID()默认值?

现在,在DealerID上使用逻辑基础:如果它是GUID,为什么?这是一个内部的非用户可读值。

如果你真的需要这个,那么你必须使用一个计算列作为“base”值,另一列使用ISNULL的“实际”值。

答案 1 :(得分:3)

我有一个类似的问题,我想自动为插入到表中的新记录分配URL slug。我采用的方法是将字段的默认值设置为'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

答案 2 :(得分:0)

如果您有特定原因需要使用UDF,请更正我,但为什么不在表DDL中定义列的默认值,如果您在{{0}中提供特定值,则会覆盖该列。 {1}},UPDATE等?在INSERT中使用UDF将导致每行执行该函数,如果在表定义级别处理它,则会节省开销。