Как ВСТАВИТЬ массив значений в SQL Server 2005?

#sql #sql-server #sql-server-2005 #bulkinsert

Вопрос:

Как написать SQL-код для ВСТАВКИ (или ОБНОВЛЕНИЯ) массива значений (возможно, с сопутствующим массивом имен полей или с матрицей с ними обоими) без простой итерации?

Ответ №1:

Я создаю список в виде строки xml и передаю его сохраненным процессам. В SQL 2005 он имеет расширенные функции xml для анализа xml и выполнения массовой вставки.

проверьте это сообщение: Передача списков в SQL Server 2005 с параметрами XML

Комментарии:

1. Да, это определенно один из лучших вариантов. Я использовал этот подход в качестве стандартного способа передачи списка значений в хранимую процедуру.

Ответ №2:

Простой способ объединить значения в список и передать его в sp.

В sp используйте dbo.Разделите udf для преобразования обратно в набор результатов (таблица).

Создайте эту функцию:

 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
 

а потом попробуй:

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

Ответ №3:

Если ваши данные уже есть в базе данных, вы можете использовать INSERT SELECT синтаксис. Это немного отличается от ВСТАВКИ ЗНАЧЕНИЙ…

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

Ответ №4:

Я понимаю, что вы говорите о написании хранимой процедуры для приема массива значений

В SQL Server 2005 вам потребуется использовать переменную XML

SQL 2008 добавляет поддержку табличной переменной в качестве параметров

Здесь вы можете найти хорошие примеры передачи таблицы в хранимую процедуру в формате XML и в виде табличной переменной (SQL Server 2008).