SQL SERVER - Criar Funcao Com IF

1 resposta
sqlserver
C

Bom dia pessoal!!
Estou tentando criar uma função basicamente simples no sql server, na qual preciso fazer um if. porém está dando erro de sintaxe.

vou deixar o código logo abaixo pra ver se alguém consegue me ajudar…

CREATE OR ALTER FUNCTION RETORNADADOS(@ID INT,@tipo char(1)) RETURNS TABLE
AS RETURN (
IF (@tipo='S')
BEGIN

SELECT * FROM usuario WHERE codigo=@ID

END
ELSE 
BEGIN
SELECT *   FROM usuario
END 

)

1 Resposta

A

Ao tentar fazer um IF, você está tentando usar uma multi-statement table-valued function (MSTVF) ao invés de uma inline table valued function (TVF).
Por isso a sintaxe muda um pouco e as características mudam também (performance, por exemplo).

Para manter como uma TVF (que geralmente é mais rápida), você poderia escrever:

CREATE OR ALTER FUNCTION RETORNADADOS(@ID INT,@tipo char(1)) 
RETURNS TABLE
AS RETURN
  SELECT codigo, nome 
  FROM usuario 
  WHERE (@tipo != 'S' OR codigo=@ID)

Repare que o WHERE funciona como seu IF nesse caso.

Se tiver algo mais complexo e realmente precisa do IF, daí usaria a sintaxe de MSTVF:

CREATE OR ALTER FUNCTION RETORNADADOS(@ID INT,@tipo char(1)) 
RETURNS @Usuarios TABLE
(
  codigo int, 
  nome varchar(100)
) 
AS
BEGIN
  IF @tipo = 'S'
    INSERT INTO @Usuarios SELECT codigo, nome FROM usuario WHERE codigo=@ID
  ELSE
    INSERT INTO @Usuarios SELECT codigo, nome FROM usuario
  RETURN
END
Criado 26 de outubro de 2022
Ultima resposta 26 de out. de 2022
Respostas 1
Participantes 2