1
resposta

CANNOT ALTER/DROP FUNCTION

Boa tarde! Estou tentando alterar/dropar a funcao [ConsultasDias] conforme o código.. Porém me retorna o seguinte erro " Msg 3729, Level 16, State 3, Procedure ConsultasDias, Line 1 [Batch Start Line 15] Cannot ALTER 'dbo.ConsultasDias' because it is being referenced by object 'Cliente'."

Pelas minhas buscas vi que não há como realizar um comando DDL para funções escalares com a clausula 'SCHEMABINDING', outro ponto é que a tabela em que o SELECT da function consulta não há uma constraint.

ALTER FUNCTION [dbo].[ConsultasDias]
(
    -- Add the parameters for the function here
    @Cliente as nvarchar(100) 
)
RETURNS bigint
WITH SCHEMABINDING
AS
BEGIN

    RETURN (SELECT COUNT([Matricula])-COUNT([Matricula]) FROM [Log_Ficha].[dbo].[Log_Hiscon](NOLOCK) WHERE [Situacao] IS NOT NULL AND [Situacao] <> ''    AND [Data] >= convert(datetime,convert(varchar(10),GETDATE(),112)) AND URL_Sistema LIKE '%' + @Cliente + '%')

END
GO

OBS. Sim, quero que ela retorne 0.

Gostaria de saber se é possivel realizar esse DROP/ALTER

1 resposta

Oi Lucas, tudo bem? Não tenho experiência com PL/SQL, mas pela mensagem de erro, acredito que você não possa fazer alter ou drop por que há referências a função no objeto Cliente.

Isso me parece uma constraint implícita.

É como remover uma chave estrangeira de uma tabela que é referenciada em outra tabela.

Faz sentido?