2017-09-23 24 views
1

の部分文字列に2つのテーブルを結合、一つは次のようなメタデータフィールドが含まれていますSQLは - 私は2つのテーブルを持っているメタデータ

<ACTIONMETA> 
    <OBJECTGUID1>BC9E38A1-5A60-4648-A121-9F3E48B828F7</OBJECTGUID1> 
    <OBJECTGUID2>00000000-0000-0000-0000-000000000000</OBJECTGUID2> 
</ACTIONMETA> 

他のテーブルには、間の部分文字列に一致するフィールドがあります。

これらの2つのテーブルを一緒に結合したいと考えています。ここに私のコードです:

select ca.Metadata, * from [dbo].[CustomAction] ca 
inner join [dbo].[CustomScript] cs on 
cs.CustomScriptGUID=substring(ca.Metadata, 
charindex('1>',ca.Metadata)+2,charindex('</',ca.Metadata)- 
charindex('1>',ca.Metadata)-2) 

これは私に間違いを与えます。私も次のように試しました:

select ca.Metadata, substring(ca.Metadata, 
charindex('1>',ca.Metadata)+2,charindex('</',ca.Metadata)- 
charindex('1>',ca.Metadata)-2) as ca.CustomScriptGUID, 
from [dbo].[CustomAction] ca 
inner join [dbo].[CustomScript] cs on 
cs.CustomScriptGUID=ca.CustomScriptGUID 

また、常にエラーが表示されます。このタイプの部分文字列でこれらを結合する方法はありますか?

+2

エラーメッセージは何ですか? – Turo

+0

私はあなたが意味すると思います: 'ca.Metadata、cs。* from' – Sami

答えて

0

別のオプション、そしておそらく少しクリーナー

メタデータはXML

Select ca.Metadata , * 
From [dbo].[CustomAction] ca 
Join [dbo].[CustomScript] cs 
    on cs.CustomScriptGUID = ca.metadata.value('ACTIONMETA[1]/OBJECTGUID1[1]','varchar(max)') 

のデータ型を持っている場合は、メタデータが文字列の場合

Select ca.Metadata , * 
From [dbo].[CustomAction] ca 
Join [dbo].[CustomScript] cs 
    on cs.CustomScriptGUID = cast(ca.metadata as xml).value('ACTIONMETA[1]/OBJECTGUID1[1]','varchar(max)') 
+0

メタデータは文字列であり、そのクエリは機能しました!どうもありがとうございます! – jtcarrie

+0

@jtcarrie –

関連する問題