Usuário com melhor resposta
GetDate em function não funciona

Pergunta
-
Pessoal,
Estou criando uma function (SQL 2000) e dentro dessa function preciso utilizar a função GetDate() que simplesmente retorna o seguinte erro:
Invalid use of 'getdate' within a function.
Pensei então em colocar o nome do criador na frente tipo dbo.GetDate() porém me retorna outro erro porém somente quando vou executar o erro retornado é:
Invalid object name 'dbo.getdate'.
Por que ocorre esse erro?
O código da function de exemplo segue abaixo:
create Function teste
(
)
Returns datetime
As
Begin
Return dbo.getdate()
End
Respostas
-
Roberto,
Não podemos usar funções não-determinísticas dentro de funções. E a GETDATE é uma delas.
Uma opção que geralmente uso nesses casos é passar a data como parâmetro!
Exemplo:
CREATE FUNCTION dbo.fnTeste (@data datetime)
RETURNS datetime
AS
BEGIN
RETURN @Data
END
E a Chamada seria assim:
SELECT dbo.fnTeste (GETDATE())
Claro, este é apenas um exemplo. Não faria sentido passar uma data só para retornar ela novamente.
Abraço
Todas as Respostas
-
Roberto,
Não podemos usar funções não-determinísticas dentro de funções. E a GETDATE é uma delas.
Uma opção que geralmente uso nesses casos é passar a data como parâmetro!
Exemplo:
CREATE FUNCTION dbo.fnTeste (@data datetime)
RETURNS datetime
AS
BEGIN
RETURN @Data
END
E a Chamada seria assim:
SELECT dbo.fnTeste (GETDATE())
Claro, este é apenas um exemplo. Não faria sentido passar uma data só para retornar ela novamente.
Abraço
-
Roberto,
O Alexandre, esta certo, na verdade não é permitido utilizar funções que possuem um retorno determinado de informações, agora o exemplo que ele postou com certeza vai resolver o seu problema.
Mas, gostaria de saber porque criar uma função que vai retornar o valor da function GetDate(), sendo que, já existe uma função para isso?
Neste seu exemplo você esta utilizando uma função scalar!!!
-
Muito obrigado Alexandre.
Junior,
Só passei como exemplo na verdade eu seleciono um valor (datetime) no banco realizo algumas verificações (dias da semana, período etc) e retorno a quantidade de dias de diferença (utilizando função DateDiff) da data atual (GetDate) em relação a data calculada. O exemplo que postei foi somente para visualizar o problema.
Muito obrigado e irei fazer dessa maneira, pois só me deparei com esse erro no SQL 2000 já no SQL 2005 não ocorre os erros citados. Acho que é limitação do 2000 -
-
-
-
-