Sql 在多个记录中查询XML
我在Dynamics Business Portal工作。在尝试将GP Dynamics EmployeeID与用户的AD用户名联接时,我发现了几个表,它们将帮助我创建此哈希。在业务门户表中,我能找到的唯一一个将业务门户与GP联系起来的表是[MBFROLUESER]。足够的背景资料,这里有一些样本数据和我想如何显示它Sql 在多个记录中查询XML,sql,sql-server,xml,dynamics-crm,Sql,Sql Server,Xml,Dynamics Crm,我在Dynamics Business Portal工作。在尝试将GP Dynamics EmployeeID与用户的AD用户名联接时,我发现了几个表,它们将帮助我创建此哈希。在业务门户表中,我能找到的唯一一个将业务门户与GP联系起来的表是[MBFROLUESER]。足够的背景资料,这里有一些样本数据和我想如何显示它 declare @table table(UserID varchar(50),Constituent varchar(200)) insert into @table value
declare @table table(UserID varchar(50),Constituent varchar(200))
insert into @table values
('D8851830-EF23-44BE-BB17-0008D70F9F5B','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="002001" /></entityKey>')
,('78E42A10-D7CE-4B40-86F2-001549F5A3C2','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="001079" /></entityKey>')
,('1F899A87-6186-4E2B-BA18-0076A4D95836','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="001997" /></entityKey>')
,('CB043358-0B16-4055-A806-00A63964C1A9','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="001557" /></entityKey>')
,('3EF8C35D-6227-486A-B86B-00BD5991E188','<entityKey><Microsoft.Dynamics.Common.Company.Company ID="1" /><Microsoft.Dynamics.Hrm.Entity.Employee ID="001740" /></entityKey>')
select * from @table
如果可能的话,我希望在不使用子字符串的情况下执行此操作。是的,这可能适用于本例,但其他情况下可能会出现更复杂的xml,我想学习如何正确使用它
最后,我将加入表[MbfUserWindowsIdentity],其中包括domain\username格式的AD用户名以及另一个包含UserID的列
如果有人知道一个更好的地方来拉雇员ID,那也行。基本上,我们只需要导出带有广告用户名的GP EmployeeID
对于那些好奇的人,我们正在使用GP中的数据构建一个员工目录,但该目录将具有允许用户选择不发布选择的个人信息的功能,因此与广告相关。首先,将“组成”字段转换为XML-在Dynamics/GP数据库中,此字段数据类型为NVARCHAR。
然后,使用Xquery从XML字段中提取值。见下例:
SELECT UserID
,CAST(t.Constituent AS XML).value('(/entityKey/Microsoft.Dynamics.Common.Company.Company/@ID)[1]','int') as CompanyID
,CAST(t.Constituent AS XML).value('(/entityKey/Microsoft.Dynamics.Hrm.Entity.Employee/@ID)[1]','varchar(10)') as EmployeeID
FROM @table as t
为了回答问题的另一部分,这是我找到的唯一一个将EmployeeId和userid存储在同一个表中的地方
我希望这有帮助
SELECT UserID
,CAST(t.Constituent AS XML).value('(/entityKey/Microsoft.Dynamics.Common.Company.Company/@ID)[1]','int') as CompanyID
,CAST(t.Constituent AS XML).value('(/entityKey/Microsoft.Dynamics.Hrm.Entity.Employee/@ID)[1]','varchar(10)') as EmployeeID
FROM @table as t