2016-08-09 29 views
1

Ich verwende Yellowfin, das eine Verbindung zu einer SQL 2012-Datenbank herstellt. Innerhalb einer Tabelle gibt es eine Spalte mit dem Namen EnteredXML, die vollständiges XML aus einer Web-Submission enthält, also eine Sub-Tabelle des XML-Typs innerhalb der Spalte. Aus der XML-Spalte möchte ich einen bestimmten Wert aus der Spalte CoverRateSelection erhalten.So erhalten Sie eine XML-Spalte, die Teil eines Tabellenfelds in SQL ist

Ich habe folgendes versucht:

SELECT 
    MemberNo, 
    TransTypeID, 
    EnteredXML.value('(/MembershipApplication/Cover/CoverRateSelection/@value)[1]', 'varchar(max)') 
FROM 
    V204241Webtransactions 
WHERE 
    TransTypeID = 'MemAp' 

Die Antwort, die ich von diesem erhalten ist

SQL-Anweisung ungültig ist.

Die Fehlermeldung von der Datenbank zurückgegeben wurde:

kann nicht entweder Spalte „EnteredXML“ oder die benutzerdefinierte Funktion oder Aggregat „EnteredXML.value“ oder der Name ist nicht eindeutig finden.

die Tabelle sieht wie folgt aus:

enter image description here

Die XML sieht wie folgt aus (ich habe persönliche Informationen entfernt):

enter image description here

Ich habe diese weit andere Verwendung Beiträge bei stackoverflow:

how-to-get-a-particular-attribute-from-xml-element-in-sql-server

extracting-attributes-from-xml-fields-in-sql-server-2008-table

reading-xml-that-is-saved-as-text-from-sql

aber ich bin jetzt ein wenig verloren und verwirrt. Jede Hilfe würde sehr geschätzt werden.

Dank

Chris

+1

Sind Sie 100% sicher auf den Spaltennamen, weil das das offensichtlichste Problem ist, dass die Fehlermeldung versucht, Sie zu steuern. –

+1

Was ist der Typ von "EnteredXML"? Es muss XML sein, um die XML-Funktion 'value' zu ​​akzeptieren. – Serg

Antwort

0

Dank @Serg erkannte ich, obwohl die Werte XML waren es infact ein Textfeld war daher die Substring Methode I verwendet, um die Daten zu erhalten:

SELECT 
    MemberNo, 
    TransTypeID, 
    SUBSTRING(EnteredXML, (CHARINDEX('<CoverRateSelection>', EnteredXML)+ 20), (CHARINDEX('</CoverRateSelection>', EnteredXML) - (CHARINDEX('<CoverRateSelection>', EnteredXML)) As JoinCover 
FROM 
    V204241Webtransactions 
WHERE 
    TransTypeID = 'MemAp' 

Wenn Sie diesen Befehlstyp ausführen, wird jedoch auch das XML-Tag eingefügt. Ich habe einen Wert auf den Längenabschnitt des Teils versucht, indem:

((CHARINDEX('</CoverRateSelection>', EnteredXML)-20) - (CHARINDEX('<CoverRateSelection>', EnteredXML)

aber es gibt keine Werte und sagt der SQL ungültig ist, trotz des SQL-Tests sagen, es gültig ist. Ich glaube, das ist ein Problem mit dem Programm und nicht mit SQL.