none
Onde está o erro nesta função com valor de tabela? RRS feed

  • Pergunta

  • Onde está o erro nesta função com valor de tabela?

    CREATE FUNCTION [dbo].[ufn_fornecedores]
    (
    	@pais NVARCHAR(15) = NULL
    )
    RETURNS TABLE
    AS
    RETURN(
    	IF @pais IS NULL
    		SELECT [supplierid]
    			  ,[companyname]
    			  ,[contactname]
    			  ,[contacttitle]
    			  ,[address]
    			  ,[city]
    			  ,[region]
    			  ,[postalcode]
    			  ,[country]
    			  ,[phone]
    			  ,[fax]
    		  FROM [Production].[Suppliers]
    	ELSE
    		SELECT [supplierid]
    			  ,[companyname]
    			  ,[contactname]
    			  ,[contacttitle]
    			  ,[address]
    			  ,[city]
    			  ,[region]
    			  ,[postalcode]
    			  ,[country]
    			  ,[phone]
    			  ,[fax]
    		  FROM [Production].[Suppliers]
    		  WHERE [country] = @pais
    )
    


    • Editado LWMN sábado, 29 de agosto de 2015 00:40
    sábado, 29 de agosto de 2015 00:40

Respostas

  • Na verdade está quase certo seu código !!!
    Acontece que com funções que retornam uma tabela alguns cuidados tem que ser tomados...

    1 - CREATE FUNCTION [dbo].[ufn_fornecedores](@pais NVARCHAR(15))
    2 - RETURNS @TBL TABLE(ID INT)
    3 - AS
    4 - BEGIN
    5 -	IF (@pais IS NULL)
    6 -	BEGIN
    7 -		INSERT @TBL(ID)	SELECT 1
    8 -		  FROM [Production].[Suppliers]
    9 -	END
    10 -	ELSE
    11 -	BEGIN
    12 -		INSERT @TBL(ID)	SELECT 2
    13 -		  FROM [Production].[Suppliers]
    14 -		  WHERE [country] = @pais
    15 -	END
    16 -	RETURN
    17 -END
    Eu reduzi seu código para efeito de exemplificação ....
    Na linha 2 você declara a variável da tabela e todos os campos que vão receber os dados.
    Na linha 7 você deve inserir na variável de tabela os resultados do seu select, campo a campo.


    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Sugerido como Resposta Junior Galvão - MVPMVP domingo, 30 de agosto de 2015 02:18
    • Marcado como Resposta LWMN domingo, 30 de agosto de 2015 17:20
    sábado, 29 de agosto de 2015 14:20
  • Na verdade está quase certo seu código !!!
    Acontece que com funções que retornam uma tabela alguns cuidados tem que ser tomados...

    1 - CREATE FUNCTION [dbo].[ufn_fornecedores](@pais NVARCHAR(15))
    2 - RETURNS @TBL TABLE(ID INT)
    3 - AS
    4 - BEGIN
    5 -	IF (@pais IS NULL)
    6 -	BEGIN
    7 -		INSERT @TBL(ID)	SELECT 1
    8 -		  FROM [Production].[Suppliers]
    9 -	END
    10 -	ELSE
    11 -	BEGIN
    12 -		INSERT @TBL(ID)	SELECT 2
    13 -		  FROM [Production].[Suppliers]
    14 -		  WHERE [country] = @pais
    15 -	END
    16 -	RETURN
    17 -END
    Eu reduzi seu código para efeito de exemplificação ....
    Na linha 2 você declara a variável da tabela e todos os campos que vão receber os dados.
    Na linha 7 você deve inserir na variável de tabela os resultados do seu select, campo a campo.


    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    Flávio, ficou perfeito. Funcionou muito bem. Obrigado!

    Eu queria só fazer uns ajustes, por exemplo, nos casos de valores nulos queria não passar NULL no parâmetro, é possível?

    select * from dbo.ufn_fornecedores()
    • Marcado como Resposta LWMN domingo, 30 de agosto de 2015 17:17
    • Editado LWMN domingo, 30 de agosto de 2015 17:23
    domingo, 30 de agosto de 2015 17:17

Todas as Respostas

  • Boa Noite,

    Você chegou executar essa função no SSMS para observar os possíveis erros gerados na criação?


    Att, Bruno Silva.

    sábado, 29 de agosto de 2015 03:27
  • Boa Noite,

    Você chegou executar essa função no SSMS para observar os possíveis erros gerados na criação?


    Att, Bruno Silva.

    Bruno boa noite, fiz sim e ele está indicando que os parênteses não estão fechados adequadamente.
    sábado, 29 de agosto de 2015 04:32
  • Na verdade está quase certo seu código !!!
    Acontece que com funções que retornam uma tabela alguns cuidados tem que ser tomados...

    1 - CREATE FUNCTION [dbo].[ufn_fornecedores](@pais NVARCHAR(15))
    2 - RETURNS @TBL TABLE(ID INT)
    3 - AS
    4 - BEGIN
    5 -	IF (@pais IS NULL)
    6 -	BEGIN
    7 -		INSERT @TBL(ID)	SELECT 1
    8 -		  FROM [Production].[Suppliers]
    9 -	END
    10 -	ELSE
    11 -	BEGIN
    12 -		INSERT @TBL(ID)	SELECT 2
    13 -		  FROM [Production].[Suppliers]
    14 -		  WHERE [country] = @pais
    15 -	END
    16 -	RETURN
    17 -END
    Eu reduzi seu código para efeito de exemplificação ....
    Na linha 2 você declara a variável da tabela e todos os campos que vão receber os dados.
    Na linha 7 você deve inserir na variável de tabela os resultados do seu select, campo a campo.


    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Sugerido como Resposta Junior Galvão - MVPMVP domingo, 30 de agosto de 2015 02:18
    • Marcado como Resposta LWMN domingo, 30 de agosto de 2015 17:20
    sábado, 29 de agosto de 2015 14:20
  • Na verdade está quase certo seu código !!!
    Acontece que com funções que retornam uma tabela alguns cuidados tem que ser tomados...

    1 - CREATE FUNCTION [dbo].[ufn_fornecedores](@pais NVARCHAR(15))
    2 - RETURNS @TBL TABLE(ID INT)
    3 - AS
    4 - BEGIN
    5 -	IF (@pais IS NULL)
    6 -	BEGIN
    7 -		INSERT @TBL(ID)	SELECT 1
    8 -		  FROM [Production].[Suppliers]
    9 -	END
    10 -	ELSE
    11 -	BEGIN
    12 -		INSERT @TBL(ID)	SELECT 2
    13 -		  FROM [Production].[Suppliers]
    14 -		  WHERE [country] = @pais
    15 -	END
    16 -	RETURN
    17 -END
    Eu reduzi seu código para efeito de exemplificação ....
    Na linha 2 você declara a variável da tabela e todos os campos que vão receber os dados.
    Na linha 7 você deve inserir na variável de tabela os resultados do seu select, campo a campo.


    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    Flávio, ficou perfeito. Funcionou muito bem. Obrigado!

    Eu queria só fazer uns ajustes, por exemplo, nos casos de valores nulos queria não passar NULL no parâmetro, é possível?

    select * from dbo.ufn_fornecedores()
    • Marcado como Resposta LWMN domingo, 30 de agosto de 2015 17:17
    • Editado LWMN domingo, 30 de agosto de 2015 17:23
    domingo, 30 de agosto de 2015 17:17