SQL Server 2008 (parte 6) – Table-Valued Parameters
Em meu último post da série sobre as novidades do SQL Server 2008 o tema foi o Hierarchyid, hoje falarei sobre outro recurso de desenvolvimento introduzido na nova versão do SQL Server: Table-Valued Parameters.
TABLE-VALUED PARAMETERS
Basicamente, table-value parameter é um novo tipo que pode ser definido com a estrutura de uma tabela para ser usado como parâmetro em stored procedures ou dentro de rotinas, permitindo o transporte de várias linhas (rows) de dados.
Para criar um table-value parameter utilize o código abaixo adaptando as colunas de acordo com sua necessidade.
CREATE TYPE ColaboradorTableType AS TABLE
(
Nome VARCHAR(50),
Bonus INT
);
Através da janela Object Explorer do Microsoft SQL Server Management Studio é possível checar o tipo criado no caminho ilustrado abaixo.
Uma vez definido e criado, podemos usá-lo conforme o exemplo a seguir:
CREATE PROCEDURE spInsereColaborador
(
@Colaboradores ColaboradorTableType READONLY
)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Colaborador (Nome, Bonus, DataCriacao)
SELECT Nome, Bonus, GETDATE()
FROM @Colaboradores;
END
GO
DECLARE @ColabTT AS ColaboradorTableType;
INSERT INTO @ColabTT (Nome, Bonus)
SELECT Recurso, BonusConcedido
FROM
Carga;
EXEC spInsereColaborador @ColabTT;
GO
No código acima foi criado uma stored procedure que recebe o parâmetro @Colaboradores definido como sendo do tipo ColaboradorTableType (linha 1 a 11) que pode ser usado da mesma maneira que faríamos com uma tabela. Na segunda parte do código criamos uma variável, também do tipo ColaboradorTableType chamada @ColabTT que recebe o resultado da consulta de uma tabela qualquer (linhas 14 a 21).
Na linha 3, junto com a declaração do parâmetro está a palavra reservada READONLY, obrigatória neste caso, já que parâmetros do tipo table-valued não podem realizar operações DML (insert, update e delete) no corpo da stored procedure. Em contrapartida, table-valued parameters reduzem round trips para o servidor e podem oferecer um modelo mais simples de programação.
Até o próximo post!