2016-05-04 14 views
-4

このような文字列から1,2,3,4;7,3,8,4;3,9,0,4;の値を、ストアドプロシージャを使用してSQL Server 2008に挿入するにはどうすればよいですか?;は新しい行の開始を表し、,は新しい列を表しますか?例えば、値1 2 3 4はそれぞれの列に挿入され、 ';'の後ろに挿入される。次の値i:e 7 3 8 4は同じ列に最初の列に「7」を挿入します。ストアドプロシージャを使用してSQL Server 2008の文字列から値を追加する方法は?

私はいくつかの回答を見つけましたが、これまで以上に私を混乱させました。

編集:

私が見つけた答えのほとんどは、LTRIMとRTRIMを使用してちょうど2つの列の値を挿入したが、私は別のテーブルのカラムのvarring番号を持っています。 私はこれは私が使用し、行データにされて変換し、最終的に文字列データを分割するには、データベーステーブル

に挿入二回、入力された文字列を分割し、あなたのためのSQLスクリプトを用意している私の問題

+1

最初のテストデータベースでスクリプトの下に確認してください?あなたを混乱させ、それを混乱させる何の答えが見つかりましたか? –

答えて

0

を説明願っていますこのSQL split string function まず、データベース上でこの関数を作成する必要があります。あなたは、SQL Server 2016を使用していない場合は

は残念ながら、私たちは、スプリット機能

を作成する必要が私の代わりにSQLサブSELECTステートメントまたは一時テーブルを使用して、単一の文で、すべての手順を管理するためにSQL Server CTE query structureを使用しています。複数CTE構造を理解することが

は、私はそれが を役に立てば幸い上記のチュートリアルに

を参照してください、あなたがそれらを追加することによって何を意味する

declare @str varchar(max) = '1,2,3,4;7,3,8,4;3,9,0,4;' 

create table stringtorows (id int, col1 int, col2 int, col3 int, col4 int) 

;with cte as (
select 
    id rowid, val rowdata 
from dbo.split(@str,';') 
where val <> '' 
), cte2 as (
select 
    rowid, id colid, val coldata 
from cte 
cross apply dbo.Split(rowdata,',') 
), cte3 as (
select 
    rowid, 
    case when colid = 1 then coldata end col1, 
    case when colid = 2 then coldata end col2, 
    case when colid = 3 then coldata end col3, 
    case when colid = 4 then coldata end col4 
from cte2 
) 
insert into stringtorows 
select 
    rowid, max(col1) col1, max(col2) col2, max(col3) col3, max(col4) col4 
from cte3 
group by rowid 

select * from stringtorows 
+0

どうもありがとうございました。私はあなたがどれくらい私を助けてくれたか教えてくれません。 –

関連する問題