Question

Comment puis-je écrire le code SQL dans INSERT (ou UPDATE) un tableau de valeurs (avec probablement un tableau de noms de champs, ou avec une matrice avec les deux) sans itération simple?

Était-ce utile?

La solution

Je construis la liste en tant que chaîne xml et la passe aux procs stockés. En SQL 2005, des fonctionnalités XML améliorées lui permettaient d’analyser le fichier XML et d’effectuer une insertion en bloc.

vérifier ce post: Transmission de listes à SQL Server 2005 avec des paramètres XML

Autres conseils

Un moyen simple de concaténer les valeurs dans une liste et de les transmettre au sp.

Dans sp, utilisez dbo.Split udf pour reconvertir en résultats (table).

Créez cette fonction:

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

et essayez ensuite:

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

Si vos données sont déjà dans la base de données, vous pouvez utiliser la syntaxe INSERT SELECT . C'est un peu différent de INSERT VALUES one ...

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

Je comprends que vous parlez d'écrire une procédure stockée pour accepter un tableau de valeurs

Avec SQL Server 2005, vous auriez besoin d'utiliser une variable XML

SQL 2008 ajoute le support à la variable de table en tant que paramètres

Vous trouverez ici de bons exemples de passage d'une table à une procédure stockée sous le nom XML. et en tant que variable de table (SQL Server 2008)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top