DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Pedro Otávio
 

País: Brasil
Estado: SP
Cidade: Guaiçara
Mensagens: 61
 Postado em: 20/1/2012 9:58:52 AM

Bom dia

Preciso criar uma procedure que receba uma lista de itens e persista no banco, a lista terá um Id e o valor do produto, no c# = Dictionary<int, decimal>. Alguém sabe como fazer uma procedure desse tipo?


Valew
Joel Rodrigues
 
 
 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 811
 Postado em: 20/1/2012 11:03:08 AM
Aqui vai um exemplo de um procedure que recebe uma tabela e apenas lista seus registros (SELECT *).

Primeiramente, é preciso criar um tipo de dados que herda do tipo TABLE. Esse tipo de dados será uma tabela com a estrutura que você precisa.
#Código

CREATE TYPE TabelaParametro AS TABLE
(
ID INT,
VALOR DECIMAL(8,2)
)
GO


Feito isso, crie o procedure que recebe um parâmetro do tipo que você acabou de criar:
#Código

CREATE PROCEDURE LISTAR
@TABELA TabelaParametro READONLY --tem que ter o READONLY, pois os dados de uma tabela passada como parâmetro serão apenas para consulta
AS
BEGIN
SELECT * FROM @TABELA
END


Agora, um exemplo de como utilizar:
#Código

DECLARE @MinhaTabela TabelaParametro
INSERT INTO @MinhaTabela VALUES (1, 10)
INSERT INTO @MinhaTabela VALUES (2, 13.4)
INSERT INTO @MinhaTabela VALUES (3, 25.8)
INSERT INTO @MinhaTabela VALUES (4, 129.78)

EXEC LISTAR @MinhaTabela


Espero que sirva.

 
Joel Rodrigues
 
 
 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 811
 Postado em: 20/1/2012 11:05:37 AM
Ah, esse tipo de parâmetro foi introduzido no SQL Server 2008.

 
Marco Pinheiro
 
 


País: Brasil
Estado: MG
Cidade: Belo Horizonte
Mensagens: 110
 Postado em: 26/1/2012 10:43:16 PM
Se entendi, uma outra maneira seria assim:

CREATE PROCEDURE teste
@ID INT,
@VALOR MONEY

BEGIN

condições desejadas....

END
GO

EXEC teste 1, 25.80
GO

 
Pedro Otávio
 
 


País: Brasil
Estado: SP
Cidade: Guaiçara
Mensagens: 61
 Postado em: 30/1/2012 10:06:13 AM
A sugestão do Joel Rodrigues parece ser a mais adequada ao meu problema, porém não estou conseguindo criar esse tipo no banco, está me gerando o seguinte error quando executa CREATE TYPE TabelaParametro AS TABLE (....):

Sintaxe incorreta próxima à palavra-chave AS.

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03