Procedure persistindo uma lista de valores

20/01/2012

0

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
Pedro Maitan

Pedro Maitan

Responder

Posts

20/01/2012

Joel Rodrigues

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.
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:
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:
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.
Responder

20/01/2012

Joel Rodrigues

Ah, esse tipo de parâmetro foi introduzido no SQL Server 2008.
Responder

26/01/2012

Marco Pinheiro

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
Responder

30/01/2012

Pedro Maitan

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.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar