/ / Usando UDF para o valor padrão de uma coluna - sql-server, user-defined-functions

Usando o UDF para o valor padrão de uma coluna - sql-server, user-defined-functions

Eu criei uma UDF que estou usando para gerar um valor padrão para uma coluna. Ele funciona muito bem, mas eu quero passar outro campo como um parâmetro para a função. Isso é possível?

Por exemplo, um dos campos é um campo DealerID, e eu quero passar o valor do campo DealerID para minha UDF, porque vou usá-lo para calcular o novo valor. Qualquer ajuda seria apreciada!

Respostas:

3 para resposta № 1

Não, porque o valor padrão será necessário antes que o DealerID seja conhecido (por exemplo, no INSERT)

Editar:

Isso significa que o SQL Server não possui o valor na tabela no momento da inserção, somente depois. Portanto, não pode um UDF para o padrão.

Por exemplo, que tal uma inserção de múltiplas linhas ou onde você tem o padrão NEWID ()?

Agora, usando lógica básica em DealerID: se é GUID, por quê? É um valor legível interno, não-usuário.

Se você realmente precisa disso, você terá que usar uma coluna computada para o valor "base" e outra coluna para o valor "real" com ISNULL.


3 para resposta № 2

Eu tive um problema semelhante, onde eu queriaAtribuir automaticamente um URL slug para novos registros inseridos na tabela. A abordagem que fiz foi definir o valor padrão do campo como "NOTSET" (apenas um valor de espaço reservado de texto) e depois usar um gatilho de inserção para atualizar o campo ON INSERT para o valor da minha UDF (onde o valor do campo é NOTSET) segue:

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

0 para resposta № 3

Por favor, corrija-me se você tiver um motivo específicopor que você precisa usar uma UDF, mas por que não apenas definir o valor padrão para a coluna em sua tabela DDL, que será então sobrescrita se você fornecer um valor específico em sua tabela. UPDATE, INSERT etc? Usando um UDF em um SELECT fará com que a função seja executada a cada linha, uma sobrecarga que você salvará se for atendida no nível de definição da tabela.