Pergunta

Como faço para escrever o código SQL para inserir (ou UPDATE) uma matriz de valores (com provavelmente um array atendente de nomes de campos, ou com uma matriz com os dois) sem simples iteração?

Foi útil?

Solução

I construir a lista como uma string XML e passá-lo para os procedimentos armazenados. No SQL 2005, tem melhorado funcionalidades XML para analisar o xml e fazer uma inserção em massa.

verifique este post: Passando listas para SQL Server 2005 com XML Parâmetros

Outras dicas

A maneira simples para concatenar os valores em uma lista e passá-lo para o sp.

No uso sp dbo.Split UDF para converter de volta para conjunto de resultados (tabela).

Criar esta função:

CREATE FUNCTION dbo.Split(@String nvarchar(4000), @Delimiter char(1))
returns @Results TABLE (Items nvarchar(4000))
as
begin
declare @index int
declare @slice nvarchar(4000)

select @index = 1
if @String is null return

while @index != 0

begin
select @index = charindex(@Delimiter,@String)
if @index !=0
select @slice = left(@String,@index - 1)
else
select @slice = @String

insert into @Results(Items) values(@slice)
select @String = right(@String,len(@String) - @index)
if len(@String) = 0 break
end return
end

e tente:

select * from dbo.split('a,b,c,d,e,f,g,h,i,j,k,l', ',')

Se os dados já está no banco de dados você pode usar sintaxe INSERT SELECT. É um pouco diferente de valores do INSERT um ...

INSERT recipient_table (field1, field2)
SELECT field1_from, field2_from
FROM donor_table
WHERE field1_from = 'condition'

Eu entendo que você está falando sobre a escrita de procedimento armazenado para aceitar matriz de valores

Com o SQL Server 2005 você precisa variável uso XML

SQL Server 2008 adiciona suporte para variável de tabela como parâmetros

Aqui você pode encontrar bons exemplos de passar uma tabela para um procedimento armazenado como XML e como variável de tabela (SQL Server 2008)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top