2017-02-13 6 views
0

私は、Microsoftの技術を学ぶ上で新しい蜂です。 私はあなたの助けが必要なSQL Serverの問題にぶつかりました。Xmlファイルノードがテーブル内に別々の行として読み込まれて挿入される

まあ、私は以下の形式のXMLファイルを持っている、 は、ご参考のためにそれを参照してください、私はどこIIがする単一の行として値をカンマ区切り、それらをロールノード値を読み込み、挿入する必要があるでは

<Permissions><Denied><User/><Roles/><Groups/></Denied><Allowed><Users/><Roles>admin,user,reader,writer,</Roles><Groups/></Allowed></Permissions> 

ストアドプロシージャのパラメータとしてpermissionidを渡します。 XMLからデータを取得し、それを分割:ここ

は、表の列は、あなたがここでは2つの問題がある

create table test 
    (
     empid int identity(1,1), 
     roles varchar(40), 
     transitionid int 
    ) 

答えて

0

(私はtransitionidに基づいてテストテーブル内の単一の行の1つのロールを挿入する必要がある)です。

SQL 2016を使用している場合は、新しいSTRING_SPLIT機能があります。あなたがそうのようなものを使用することができます。

declare @xml xml = '<Permissions><Denied><User/><Roles/><Groups/></Denied><Allowed><Users/><Roles>admin,user,reader,writer,</Roles><Groups/></Allowed></Permissions>'; 

declare @test table 
(
    empid int identity(1,1), 
    roles varchar(40), 
    transitionid int 
) 

INSERT @test (roles) 
select b.value 
FROM @xml.nodes('//Roles/text()')x(csv) 
CROSS APPLY STRING_SPLIT(CAST(x.csv.query('.') AS VARCHAR(MAX)), ',')b 
where b.value <> '' 

select * from @test 

そうしないと、あなたはHow do I split a string so I can access item x?またはhttps://sqlperformance.com/2012/07/t-sql-queries/split-stringsについての詳細を見つけることができるカスタム文字列の分割方法を使用して、類似した何かをする必要があります - 基本的には、両方のは、どちらかのカスタムTを書く必要SQL Serverにインポートされる-SQL関数またはCLRコード。上記と同じ方法を使用できます(STRING_SPLITをカスタム文字列分割関数の名前に置き換えてください)。

関連する問題