2008-10-03 2 views

ответ

12

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

проверить этот пост: Passing lists to SQL Server 2005 with XML Parameters

+0

Да, это, безусловно, один из лучших вариантов. Я использовал этот подход как стандартный способ передачи списка значений в хранимую процедуру. – User 2009-02-06 11:11:35

1

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

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

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

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

1

Если ваши данные уже в базе данных, вы можете использовать синтаксис INSERT SELECT. Это немного отличается от вставки значений одного ...

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

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

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

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

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', ',') 
Смежные вопросы