2017-07-26 1 views
0

Ich wollte hier nur Hilfe bekommen. Ich habe eine Situation, wo ich einige Daten innerhalb des <Column Name> Tags finden muss, wie in der XML unten gezeigt.Suchen Sie nach einem bestimmten Spaltennamen aus mit einer XML-Spalte in SQL Server

Ich hatte ein Problem, wo einige schlecht formatierte Daten in das System exportiert wurden, ich fand dieses Stück, aber jetzt gibt es einen Prozess, wo ich Daten aus dem System IMPORTIEREN. Jetzt habe ich eine Tabelle, in der XML gespeichert ist.

Ich muss durch die gesamte Tabelle durchlaufen, um zu sehen, ob dieser Spaltenname in dieser bestimmten ID-Spalte existiert, und wenn es das tut, werde ich die ID zurückgeben. Sagen Sie zum Beispiel, mein Tabellenname ist Sample und die Spalten sind (ID, ImportXML).

Irgendwelche Hilfe, wie ich das erreichen kann? Neu im Umgang mit XML innerhalb von SQL Server.

<?xml version="1.0" encoding="UTF-8"?> 
<ExportConfiguration id="SampleExport"> 
    <definitions>  
     <ClientName Value="Sample"/>  
     <FileType Value="XML"/>  
     <FileName>  
      <Value Value="SomeValue"/>  
     </FileName> 
     <Columns> 
      <Column Name="abc" DataType="String" Value="test123"/>  
      <Column Name="findthis" DataType="String" Value="Test456"/>   
     </Columns> 
    </definitions> 
</ExportConfiguration> 

Also im Grunde aus dem oben genannten Code mag ich den Wert erhalten innerhalb <Columns>/<Column Name> = "findthis" so dass im Grunde findthis mein Stichwort ist, und ich möchte alle IDs der Spalten, die das Schlüsselwort findthis nur für Argument willen enthalten bekommen.

Antwort

3

Etwas wie folgt aus:

-- Test table. 
declare @xTable table (ID int identity(1,1) primary key clustered, XMLData xml) 

-- Insert an XML document. I only did one, but the same would work for multiple 
insert into @xTable 
select '<?xml version="1.0" encoding="UTF-8"?> 
      <ExportConfiguration id="SampleExport"> 
       <definitions>  
        <ClientName Value="Sample"/>  
        <FileType Value="XML"/>  
        <FileName>  
         <Value Value="SomeValue"/>  
        </FileName> 
        <Columns> 
         <Column Name="abc" DataType="String" Value="test123"/>  
         <Column Name="findthis" DataType="String" Value="Test456"/>   
        </Columns> 
       </definitions> 
      </ExportConfiguration>' 

-- Return everything from the table with your XML where there is an attribute at the path "/ExportConfiguration/definitions/Columns/Column" with the name "Name" and the value "findthis" 
select * 
from @xTable 
where XMLData.exist('/ExportConfiguration/definitions/Columns/Column[@Name eq "findthis"]') = 1 
+1

Gute Antwort! Nur als Erweiterung: Der Suchstring '' findthis' 'kann über' sql: variable() 'oder' sql: column() 'eingeführt werden, wenn dies nicht in allen Fällen gleich ist ... – Shnugo

Verwandte Themen