Table-Valued Parameters – Utilizando o tipo de dados tabela

Em versões anteriores ao SQL Server 2008 não é possível utilizar tabelas como parâmetro de Stored Procedures. Quando temos de enviar múltiplos dados para o banco de dados, acabamos por enviar tais dados um de cada vez, linha por linha, orientados por um laço de repetição. O SQL Server 2008 proporciona um contorno para esta solução através do uso de Table-Valued Parameters. Os Table-Valued Parameters permitem a passagem de tabelas como parâmetro para Stored Procedures.

Para a utilização deste recurso é necessário seguir um conjunto de passos, vou enumerá-los a seguir:

1 – Tipo dados de tabela

A primeira coisa a se fazer é criar um tipo de dados de tabela (table type). Para a criação deste tipo de dados deve-se utilizar a seguinte sintaxe.

CREATE TYPE dbo.PointAttention AS TABLE
(
Id int NOT NULL,
Description varchar(100) NOT NULL,
Date datetime NOT NULL,
PRIMARY KEY (Id)
)
GO

2 – Trabalhando com o tipo de dados de tabela

Para utilizar este tipo de dados, na sintaxe Transaction-SQL, é preciso criar uma variável deste tipo de dados e então valorizá-la como se fosse uma tabela.

DECLARE @varPoint PointAttention

INSERT INTO @varPoint(Id,Description,Date)
VALUES (100,’Alerta de segurança 1′,’2011-01-20′),
(101,’Alerta de segurança 2′,’2011-01-20′),
(102,’Alerta de segurança 3′,’2011-01-20′),
(103,’Alerta de segurança 4′,’2011-01-20′),
(104,’Alerta de segurança 5′,’2011-01-20′)

SELECT * FROM @varPoint

Assim como qualquer outra tabela, variáveis desse tipo podem ser utilizadas para popular outras tabelas ou servirem em clausulas JOIN dentro de comandos de seleção.

* Observação: por ser uma variável, será limpa da memória automaticamente assim que o escopo de execução for concluído, não consumindo recursos além daqueles necessários durante seu bloco de execução.

3 – Utilizando tipos de dados tabela como parâmetro de Stored Procedures

Agora vamos ao ponto focal deste texto, que é receber uma estrutura de tabela como parâmetro de uma Stored Procedure.

Para execução do exemplo, criemos uma tabela que possua uma estrutura semelhante a do nosso tipo de dados tabela.

CREATE TABLE dbo.tbPointAttention
(
pntId int NOT NULL PRIMARY KEY,
pntDescr varchar(20) NOT NULL,
pntDate datetime NOT NULL
)
GO

Agora, para construção da Stored Procure mantemos a mesma sintaxe, apenas incluindo um parâmetro com o mesmo tipo de dados de tabela criado anteriormente.

CREATE PROC spInsertPAttention @PAttentions PointAttention READONLY
AS
INSERT INTO tbPointAttention
(pntID, pntDescr, pntDate)
SELECT ID,Description,Date
FROM @PAttentions
GO

4 – Consumindo tipos de dados tabela através de aplicações .Net

O ponto chave de utilização deste novo tipo de estrutura é a utilização do tipo de dado SqlDbType.Structured (presente no namespace System.Data.SQLClient, disponível a partir do Microsoft .Net Framework 3.5).

O exemplo abaixo demonstra como essa interação pode ser codificada utilizando C#.

Capturar

 

Vantagens da utilização de Table-Valued Parameters:
– Simplificação da lógica do projeto;
– Permite aos desenvolvedores construírem aplicações performáticas;

Referências:
http://msdn.microsoft.com/en-us/library/bb510489.aspx
http://msdn.microsoft.com/en-us/library/bb675163.aspx
http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

 

Por
Fernando Henrique Inocêncio Borba Ferreira.

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.