2008-10-03 5 views

Répondre

12

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

+0

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

1

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)

1

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' 
2

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', ',')