2017-09-23 42 views
1

的一个子2代表我有2个表,一个包含元数据字段类似如下:SQL - 加入元数据

<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 

再一次,总是得到一个错误。有没有办法在这种类型的子字符串上加入这些方法?

+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乐于助人 –