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 № 1Nã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.