2009-11-16 3 views
1

Я создал UDF, который я использую для генерации значения по умолчанию для столбца. Он отлично работает, но я хочу передать другое поле в качестве параметра в функцию. Это возможно?Использование UDF для значения по умолчанию для столбца

Например, одно из полей - поле DealerID, и я хочу передать значение поля DealerID в свой UDF, потому что я буду использовать его для вычисления нового значения. Любая помощь будет оценена!

ответ

3

Нет, так как значение по умолчанию будет необходимо до DealerID известно (например, на врезку)

Edit:

Это означает, что SQL Server не значение в таблице на момент вставки, только после. Следовательно, он не может использовать UDF по умолчанию.

Например, что касается вставки нескольких строк или где у вас есть NEWID() по умолчанию?

Теперь, используя логику basic на DealerID: если это GUID, почему? Это внутреннее, не читаемое пользователем значение.

Если вам это действительно нужно, вам нужно будет использовать вычисленный столбец для «базового» значения и другого столбца для «фактического» значения с помощью ISNULL.

+1

Я думаю, что хотел бы сделать это с помощью триггера, я не знаю, как, какие-либо предложения? – Shimmy

0

Пожалуйста, исправьте меня, если у вас есть конкретная причина, почему вам нужно использовать UDF, но почему бы просто не определить значение по умолчанию для столбца в таблице DDL, которое будет перезаписано, если вы укажете определенное значение в своем UPDATE, INSERT и т. Д.? Использование UDF в SELECT приведет к тому, что функция будет выполняться в каждой строке, накладные расходы, которые вы будете экономить, если позаботиться об этом на уровне определения таблицы.

+0

Я пытаюсь сделать формулу для вычисления значения по умолчанию, поэтому я пытаюсь использовать UDF. –

+1

Причиной может быть множество баз данных с несколькими арендаторами, где по умолчанию вы хотите использовать конкретный бизнес/клиент, которому принадлежит вставляемая запись. Ru: при вставке новой записи документа вам может потребоваться присвоить документ «неназначенный» Идентификатор группы. С текущими ограничениями средний уровень должен искать «Неназначенный» идентификатор группы документов сам по себе и включать его в значения инструкции INSERT. – AlwaysLearning

3

У меня была аналогичная проблема, когда я хотел автоматически назначить пул URL-адресов для новых записей, вставленных в таблицу. Подход, который я принял, состоял в том, чтобы установить значение по умолчанию для поля «NOTSET» (только значение заполнитель текста), затем использовало триггер insert для обновления поля 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 
Смежные вопросы