SQL查询获取Xml都不同的行
这可能还不错,我只是不知道如何最好地表达这个问题 我喜欢XmlSQL查询获取Xml都不同的行,sql,sql-server,xml,Sql,Sql Server,Xml,这可能还不错,我只是不知道如何最好地表达这个问题 我喜欢Xml <Names> <Name Language="English"> <Value></Value> <FirstName /> <MiddleName /> <LastName /> <IsPrimary>True</IsPrimary> </Name> </N
<Names>
<Name Language="English">
<Value></Value>
<FirstName />
<MiddleName />
<LastName />
<IsPrimary>True</IsPrimary>
</Name>
</Names>
其中名称可以有多个名称。我需要得到的行中有不止一行我已经完成了,并且所有的值,即连接的第一个/中间的/最后的都是不同的
所以本质上我需要确保所有的值都是唯一的。我不确定如何在xml中选择distinct
感谢您的帮助下面是示例代码,它在第一个查询中输出原始详细信息,在第二个查询中输出不同的值。第一个查询将帮助您验证第二个查询的结果。下面是一个例子
您需要将一些Linq写入XML,请查看此处的链接。你想在哪里做这件事?在C或T-SQL中?尝试在T-SQLWoops中执行此操作时,我一定错过了TSQL,我很抱歉,我以为这是在C中。我标记C是出于习惯我的错误
CREATE TABLE #Temp
(XmlString XML);
INSERT INTO #Temp (XmlString)
VALUES
('<Names>
<Name Language="English">
<Value></Value>
<FirstName>Hello Goodbye</FirstName>
<MiddleName />
<LastName />
<IsPrimary>True</IsPrimary>
</Name>
<Name Language="English">
<Value></Value>
<FirstName>Hello</FirstName>
<MiddleName />
<LastName>Goodbye</LastName>
<IsPrimary>True</IsPrimary>
</Name>
<Name Language="English">
<Value></Value>
<FirstName>Hello</FirstName>
<MiddleName />
<LastName>Goodbye</LastName>
<IsPrimary>True</IsPrimary>
</Name>
<Name Language="English">
<Value></Value>
<FirstName>Hello</FirstName>
<MiddleName>There</MiddleName>
<LastName>Goodbye</LastName>
<IsPrimary>True</IsPrimary>
</Name>
<Name Language="English">
<Value></Value>
<FirstName>No</FirstName>
<MiddleName>You</MiddleName>
<LastName>Don''t</LastName>
<IsPrimary>True</IsPrimary>
</Name>
</Names>'),
('<Names>
<Name Language="English">
<Value></Value>
<FirstName>Another</FirstName>
<MiddleName />
<LastName>Record</LastName>
<IsPrimary>True</IsPrimary>
</Name>
<Name Language="English">
<Value></Value>
<FirstName>No</FirstName>
<MiddleName>You</MiddleName>
<LastName>Don''t</LastName>
<IsPrimary>True</IsPrimary>
</Name>
</Names>');
SELECT FirstName = NULLIF(SomeNames.value('(FirstName)[1]', 'VARCHAR(MAX)'), '')
, MiddleName = NULLIF(SomeNames.value('(MiddleName)[1]', 'VARCHAR(MAX)'), '')
, LastName = NULLIF(SomeNames.value('(LastName)[1]', 'VARCHAR(MAX)'), '')
FROM #Temp src (NOLOCK)
CROSS APPLY XmlString.nodes('/Names/Name') AS ShreddedXml (SomeNames);
SELECT DISTINCT FirstName = REPLACE(RTRIM(LTRIM(CONCAT(NULLIF(SomeNames.value('(FirstName)[1]', 'VARCHAR(MAX)'), ''), ' ', NULLIF(SomeNames.value('(MiddleName)[1]', 'VARCHAR(MAX)'), ''), ' ', NULLIF(SomeNames.value('(LastName)[1]', 'VARCHAR(MAX)'), '')))), ' ', ' ')
FROM #Temp src (NOLOCK)
CROSS APPLY XmlString.nodes('/Names/Name') AS ShreddedXml (SomeNames);