SQL - 在元数据的子字符串上加入2个表

时间:2017-09-23 14:18:34

标签: sql sql-server

我有2个表,其中一个包含如下所示的元数据字段:

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

另一个表的字段与。

之间的子字符串匹配

我想将这两张桌子加在一起。这是我的代码:

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

同样,总是会出错。有没有办法在这种类型的子串上加入这些?

1 个答案:

答案 0 :(得分: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)')