2012-05-09 12 views
1

入力パラメータとして渡されたデータをCSVのvarchar(MAX)フォーマットの に挿入するストアドプロシージャを変更しましたが、二つのリストSPへとテーブルに私が合格SQLサーバ2008 - 2つの入力パラメータリストを使用してSPからテーブルに挿入

データを、それを挿入する必要があり、ここで

lstid = 1,2,3,4,5 etc. 
lstvalue = 10,20,22,35,60 etc. 

を次のlstvalueするマップをlstidとして、lstid = 1の値は10になります意味している、lstid = 2の値意志20となるように

tを挿入するにはどうすればよいですか?彼は

私はCSV値をseprateする機能を使用していたマッピングに基づいており、TEMPTABLEに格納しますが、それよりも

機能が

http://www.sqlteam.com/Forums/topic.asp?TOPIC_ID=14185

+1

さまざまなオプションについては、こちらの記事を参照してください。http://www.sommarskog.se/arrays-in-sql-2005.html –

答えて

1

あなたがストアドプロシージャでこれを行うことを余儀なくし、あなたの配列は次の2つのリストを結合することができ、同じサイズされている場合は、それらを分割次に、必要なリンクされたセットを取得するために位置(各配列の要素の数)に参加します。

以下の例ではnumber tableを使用していますが、その分割操作をanyと置き換えることができます。

-- if you dont have a number table: 
/* 
    create table [dbo].[Number](n int not null primary key clustered); 
    insert into dbo.Number 
     values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10), 
       (11),(12),(13),(14),(15),(16),(17),(18),(19),(20) 

*/ 

declare @lstid varchar(100) = '1,2,3,4,51', 
     @lstvalue varchar(100) = '10,20,22,35,60' 


declare @Length tinyint, 
     @Input varchar(8000), 
     @Delimiter char(1) 

-- sanity check 
if len(@lstid)-len(replace(@lstid, ',', '')) <> len(@lstvalue)-len(replace(@lstvalue, ',', '')) 
begin 
    raiserror('lists are not equal', 16, 1); 
    return; 
end 

--count the numbers of elements in one of the arrays 
select @Length = len(@lstid)-len(replace(@lstid, ',', ''))+1; 

--join the two arrays into one 
select @Input = @lstid + ',' + @lstvalue; 

set @Delimiter = ','; 

;with cte (i,s) 
as ( 
     select row_number() over (order by n.n asc) [i], 
       substring(@Delimiter + @Input + @Delimiter, n.n + 1, charindex(@Delimiter, @Delimiter + @Input + @Delimiter, n.n + 1) - n.n - 1) [s] 
     from dbo.Number n 
     where n.n = charindex(@Delimiter, @Delimiter + @Input + @Delimiter, n.n) and 
       n.n <= len(@Delimiter + @Input) 
    ) 
select a.s, b.s 
from cte a 
join cte b on 
     [email protected] = b.i 
order 
by  a.i; 

return 
0
ここと同じであるoblyつの列のために働くRECORD

.netコードのデータを含むデータテーブルを作成し、それをSPに渡します。

How to pass data table to Sp from .net

0

あなたはXMLとして、あなたのパラメータリストを渡すことができます。

パラメータ:

<lst><id>1</id><value>10</value></lst> 
<lst><id>2</id><value>20</value></lst> 
<lst><id>3</id><value>22</value></lst> 
<lst><id>4</id><value>35</value></lst> 
<lst><id>5</id><value>60</value></lst> 

と手順

create procedure AddXML 
    @XML xml 
as 
insert into YourTable(id, value) 
select N.value('id[1]', 'int'), 
     N.value('value[1]', 'int') 
from @XML.nodes('/lst') as T(N) 
関連する問題