Redirect

This Page

has moved to a new address:

http://www.tuliorosa.com.br

Sorry for the inconvenience…

Redirection provided by Blogger to WordPress Migration Service

segunda-feira, janeiro 31, 2011

Passando um DataTable para uma SP

Em post anteriores:

Foi demonstrado como passar uma tabela como parâmetro de uma Stored Procedure, utilizando um array e utilizando XML.

Nesse post será demonstrado como passar utilizando uma variável do tipo tabela.

Para desenvolvedores .NET, é possível fazer a chamada na SP passando um objeto DataTable.

Em resumo, o motivo de passar uma tabela para uma SP é a performance, fazendo 1000 chamadas em uma SP para passar todo o conteúdo de uma tabela é mais lento que passar a tabela toda de uma vez.

Exemplo:

No SQL Server, criação dos objetos.

-- Cria tipo tabela
create type dbo.impArq as table
(
    ID_Reg    int identity(1,1) NOT NULL,
    reg varchar(1000) NOT NULL,
    primary key (ID_Reg)
)
GO

-- Cria tabela
create table dbo.teste
(
    ID int identity(1,1) NOT NULL,
    reg varchar(1000) NOT NULL
    primary key (ID)
)

-- Cria Stored Procedure
create proc s_impArq @arq impArq readonly
as

insert    dbo.teste (reg)
select    reg from @arq;

Testando no SQL Server

declare @x impArq;

insert @x (reg) values
('aaa'),('bbb'),('ccc')

select * from @x

exec s_impArq @x

select * from dbo.teste

Testando no .NET

'Criando tabela local
Dim table As New DataTable("temp")
Dim reg As New DataColumn("reg", System.Type.GetType("System.String"))

table.Columns.Add(reg)
       
'Populando a tabela local
For i As Integer = 20 To 30
    Dim vals As Object
    vals = Chr(i + 90)
    table.Rows.Add(vals)
Next

'Chamado a stored procedure
Dim command As New SqlCommand("s_ImpArq", conn)
command.CommandType = CommandType.StoredProcedure

Dim param As SqlParameter = command.Parameters.Add("@arq", SqlDbType.Structured)

param.Value = table
command.ExecuteNonQuery()

Referência: http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

Nenhum comentário:

Postar um comentário