Сравнить 2-ые строки SQL и последующие значения со значениями XML? - PullRequest
0 голосов
/ 27 сентября 2019

Я работаю над программой автоматизации, в которой у меня есть тело запроса XML, в котором есть несколько значений, и мне нужно сравнить эти значения с данными SQL.

Я могу сравнить 1-ю строку SQL с 1-м XMLузел, но не понимаю, как сравнивать со 2-й строки и выше.

Пример кода примера приведен ниже

Тело образца запроса в формате XML:

<Students>
    <Student id="101" course="Computer" Year="2016"/>
    <Student id="102" course="Electrical" Year="2017"/>
    <Student id="103" course="Mechanical" Year="2019"/>
</Students>

Пример возврата данныхиз SQL:

id    course       Year   
==========================
101    Computer       2016
102    Electronics    2017
103    Mechanical     2019


<teststep id="Verify_Student" action ="validate"  description="Validate Student DB" argsvalue="XML_TagValue" >
    <validation id="ProductValidation"  comparisontype="contains">
      <operandexpected>
        <value id="Studentid" valuefrom="db" key="GetAllColumnValuesFromTable" column="id"/>
        <value id="StudentCourse" valuefrom="db" key="GetAllColumnValuesFromTable" column="course"/>
        <value id="Studentyear" valuefrom="db" key="GetAllColumnValuesFromTable" column="Year"/>
      </operandexpected>
      <operandactual>
        <value id="Studentid" valuefrom="previousstep" key="{0}" xpath="//Students/Student/id" attribute="id"/>
        <value id="StudentCourse" valuefrom="previousstep" key="{0}" xpath="//Students/Student/course" attribute="course"/>
        <value id="Studentyear" valuefrom="previousstep" key="{0}" xpath="//Students/Student/Year" attribute="Year"/>
      </operandactual>
    </validation>
  </teststep>

Я ожидаю, что он сравнит значение XML и значение SQL, и если выходные данные будут сопоставлены, то он покажет pass или если несоответствие одного столбца не удастся.

1 Ответ

0 голосов
/ 28 сентября 2019

Вот один из способов сравнить таблицу БД и запрос XML.Может быть, не совсем то, что вы ищете, но это даст вам преимущество.

SQL

DECLARE @xml_request XML = N'<Students>
    <Student id="101" course="Computer" Year="2016"/>
    <Student id="102" course="Electrical" Year="2017"/>
    <Student id="103" course="Mechanical" Year="2019"/>
</Students>';

DECLARE @mockTbl TABLE (id INT PRIMARY KEY, course VARCHAR(30), [year] CHAR(4));
INSERT INTO @mockTbl (id, course, [year])
VALUES
(101, 'Computer', '2016')
, (102, 'Electronics', '2017')
, (103, 'Mechanical', '2019');

;WITH rs AS
(
    SELECT c.value('@id', 'INT') AS id
        , c.value('@course', 'VARCHAR(30)') AS course
        , c.value('@Year', 'CHAR(4)') AS [year]
    FROM @xml_request.nodes('/Students/Student') AS t(c)
)
(SELECT *, 'no match' AS result FROM rs
EXCEPT
SELECT *, 'no match' FROM @mockTbl)
UNION ALL
(SELECT *, 'match' FROM rs
INTERSECT
SELECT *, 'match' FROM @mockTbl);

Вывод

+-----+------------+------+------------------+
| id  |   course   | year | result           |
+-----+------------+------+------------------+
| 102 | Electrical | 2017 | no match         |
| 101 | Computer   | 2016 | match            |
| 103 | Mechanical | 2019 | match            |
+-----+------------+------+------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...