0
我一直在摔跤幾個小時,我完全搞不清楚爲什麼它不工作。我將以下XML作爲單個列(以這種方式存儲幾十條記錄)。將XML拆分成行(TSQL)
<dsMQ1License xmlns="http://tempuri.org/dsMQ1License.xsd">
<licenseModuleInfo>
<module>AP</module>
<status>1</status>
<statusEndDate>2007-12-28T00:00:00.0000000-05:00</statusEndDate>
</licenseModuleInfo>
<licenseModuleInfo>
<module>AU</module>
<status>1</status>
<statusEndDate>2007-12-28T00:00:00.0000000-05:00</statusEndDate>
</licenseModuleInfo>
<licenseModuleInfo>
<module>CO</module>
<status>1</status>
<statusEndDate>2007-12-28T00:00:00.0000000-05:00</statusEndDate>
</licenseModuleInfo>
<licenseModuleInfo>
<module>DO</module>
<status>1</status>
<statusEndDate>2007-12-28T00:00:00.0000000-05:00</statusEndDate>
</licenseModuleInfo>
.
.
.
</dsMQ1License>
我希望能夠把XML列,並將其變成行,其中每列代表最內層的元素。
+--------+--------+---------------+ | Module | Status | StatusEndDate | +--------+--------+---------------+ | AD | 1 | 2017-12-28 | | AU | 1 | 2017-12-28 | | CO | 1 | 2017-12-28 | | DO | 1 | 2017-12-28 | +--------+--------+---------------+
基於迄今爲止我讀過的所有內容,我覺得我所做的一切應該起作用。
SELECT
T.C.value('(module)[1]','VARCHAR(MAX)') AS ModuleAbbr
,T.C.value('(status)[1]','bit') AS Active
FROM LicenseXML
CROSS APPLY LicenseXML.License.nodes('/dsMQ1License/licenseModuleInfo') T(C)
但它只是返回0行。
我哪裏錯了?
謝謝,這使我得到了正確的答案。我正在使用一系列子查詢來實際獲取XML,但我無法讓您的解決方案使用這些子查詢,但我注意到您定義了命名空間,在幾個小時後,我能夠獲得加工。我已經用我最終使用的解決方案添加了自己的帖子。 – Konraden
由於您還沒有提供表結構,我已經聲明xml爲變量 – SQL006