Domanda

Come posso scrivere il codice SQL su INSERT (o UPDATE) un array di valori (con probabilmente un array di nomi di campo associato o con una matrice con entrambi) senza semplice iterazione?

È stato utile?

Soluzione

Costruisco la lista come una stringa xml e la passo ai proc memorizzati. In SQL 2005, ha migliorato le funzionalità xml per analizzare l'xml ed eseguire un inserimento in blocco.

controlla questo post: Passando elenchi a SQL Server 2005 con parametri XML

Altri suggerimenti

Modo semplice per concatenare i valori in un elenco e passarli allo sp.

In sp usa dbo.Split udf per riconvertire in gruppo di risultati (tabella).

Crea questa funzione:

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 quindi prova:

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

Se i tuoi dati sono già nel database, puoi utilizzare la sintassi INSERT SELECT . È leggermente diverso da INSERT VALUES one ...

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

Comprendo che stai parlando di scrivere procedure memorizzate per accettare array di valori

Con SQL Server 2005 è necessario utilizzare la variabile XML

SQL 2008 aggiunge il supporto alla variabile di tabella come parametri

Qui puoi trovare buoni esempi del passaggio di una tabella a una procedura memorizzata come XML e come variabile di tabella (SQL Server 2008)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top