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
)
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