Как заявил Майк Уолтон, XML является неполным (что не позволяет другим легко воспроизводить значения NULL, о которых спрашивает OP). Если мы закроем открытые элементы XML, проблема с NULL из XMLGET заключается в том, что «clin_study» - это корневой узел ... XMLGET извлекает элементы в пределах корневого узла. Чтобы вернуть содержимое корневого узла, вы можете использовать выражение:
src_xml:"$" AS clinical_study_contents
Вот простой тестовый комплект, чтобы продемонстрировать это, а также правильное использованиеXMLGET (для извлечения содержимого элемента "id_info"):
WITH STG_XML AS (
SELECT PARSE_XML($1) AS src_xml
FROM VALUES
($$
<clinical_study>
<!-- This xml conforms to an XML Schema at:
https://clinicaltrials.gov/ct2/html/images/info/public.xsd -->
<required_header>
<download_date>ClinicalTrials.gov processed this data on September 13, 2019</download_date>
<link_text>Link to the current ClinicalTrials.gov record.</link_text>
<url>https://clinicaltrials.gov/show/NCT00010010</url>
</required_header>
<id_info>
<org_study_id>CDR0000068431</org_study_id>
<secondary_id>NYU-0004</secondary_id>
<secondary_id>P-UPJOHN-NYU-0004</secondary_id>
<secondary_id>NCI-G00-1906</secondary_id>
</id_info>
</clinical_study>
$$)
)
SELECT src_xml:"$" AS clinical_study_contents
,XMLGET(src_xml, 'id_info') as id_info_element
,*
FROM STG_XML
;