Pregunta

¿Cómo escribo el código SQL para INSERTAR (o ACTUALIZAR) una matriz de valores (probablemente con una matriz de nombres de campo, o con una matriz con ambos) sin una simple iteración?

¿Fue útil?

Solución

Construyo la lista como una cadena xml y la paso a los procesos almacenados. En SQL 2005, tiene funcionalidades xml mejoradas para analizar el xml y hacer una inserción masiva.

revisa esta publicación: Pasar listas a SQL Server 2005 con parámetros XML

Otros consejos

Forma simple de concatenar los valores en una lista y pasarlos a la sp.

En el sp use dbo.Split udf para volver a convertir al conjunto de resultados (tabla).

Cree esta función:

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

y luego intente:

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

Si sus datos ya están en la base de datos, podría usar la sintaxis de INSERT SELECT . Es ligeramente diferente de INSERTAR VALORES uno ...

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

Comprendo que está hablando de escribir un procedimiento almacenado para aceptar una matriz de valores

Con SQL Server 2005 necesitaría usar una variable XML

SQL 2008 agrega soporte a la variable de tabla como parámetros

Aquí puede encontrar buenos ejemplos de cómo pasar una tabla a un procedimiento almacenado como XML y como variable de tabla (SQL Server 2008)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top