Comment écrire le code SQL à 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?Comment insérer un tableau de valeurs dans SQL Server 2005?
Répondre
Je construis la liste sous la forme d'une chaîne de caractères XML et la passe aux processus stockés. Dans SQL 2005, il a amélioré les fonctionnalités xml pour analyser le fichier XML et effectuer une insertion en bloc.
vérifier ce poste: Passing lists to SQL Server 2005 with XML Parameters
Je comprends que vous parlez d'écriture procédure stockée pour accepter tableau de valeurs
Avec SQL Server 2005, vous devez utiliser la variable XML
SQL 2008 ajoute le support à la variable de table en tant que paramètres
Ici vous pouvez trouver de bons exemples de passage d'une table à une procédure stockée comme XML et table variable (SQL Server 2008)
Si vos données sont déjà dans la base de données, vous pouvez utiliser la syntaxe INSERT SELECT
. Il est légèrement différent des valeurs INSERT un ...
INSERT recipient_table (field1, field2)
SELECT field1_from, field2_from
FROM donor_table
WHERE field1_from = 'condition'
Une façon simple pour concaténer les valeurs dans une liste et le transmettre à la sp.
Dans le fichier sp, dbo.Split udf pour revenir au jeu de résultats (tableau).
Créer 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
puis essayer:
select * from dbo.split('a,b,c,d,e,f,g,h,i,j,k,l', ',')
Oui, cela est sans aucun doute l'une des meilleures options. J'ai utilisé cette approche comme un moyen standard de passer une liste de valeurs à une procédure stockée. – User