Usuário com melhor resposta
Onde está o erro nesta função com valor de tabela?

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
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
-
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()
Todas as 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
-
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()