Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在多个记录中查询XML_Sql_Sql Server_Xml_Dynamics Crm - Fatal编程技术网

Sql 在多个记录中查询XML

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

我在Dynamics Business Portal工作。在尝试将GP Dynamics EmployeeID与用户的AD用户名联接时,我发现了几个表,它们将帮助我创建此哈希。在业务门户表中,我能找到的唯一一个将业务门户与GP联系起来的表是[MBFROLUESER]。足够的背景资料,这里有一些样本数据和我想如何显示它

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