我有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
同样,总是会出错。有没有办法在这种类型的子串上加入这些?
答案 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)')