我创建了一个UDF,用于生成列的默认值。它工作得很好,但我想将另一个字段作为参数传递给函数。这可能吗?
例如,其中一个字段是DealerID字段,我想将DealerID字段的值传入我的UDF,因为我将使用它来计算新值。任何帮助将不胜感激!
答案 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将导致每行执行该函数,如果在表定义级别处理它,则会节省开销。