我在想是否有人能帮忙
在SQLServer2008中,我成功地将XML文档导入到具有XML数据类型的表中,但是当我尝试将该表分解到暂存表时,没有输入日期的任何日期值都会作为1900-01-01插入到暂存表中。
有没有一个切割器的方式,我错过了阻止它这样做,只是插入空而不是。我可以在staging表上使用NULLIF并用null替换1900-01-01,但是我不愿意这样做,以防有真正的1900-01-01值。
我的代码看起来像这样
SELECT tab.col.value('LastDate[1]','DATE') LastARD'
FROM import.XMLCompanyDetail
CROSS APPLY
xmldata.nodes('//VN/CompanyList/Row') AS tab(col)
非常感谢
请看下面我导入的XML示例
<?xml version="1.0" encoding="ISO-8859-1" ?>
<VN>
<CompanyList>
<Row num="1"><CoNum>7878</CoNum><CoName>ExampleName</CoName><DInc>1978-12-30</DInc><DDis></DDis></Row>
</CompanyList>
</VN>
日期DDIS应该是空的,但是当它导入到我的暂存表时,它会插入1901-01-01。
更新了代码来说明我的意思
create table staging_table
(DInc DATE NULL, LastARD DATE NULL);
with XMLCompanyDetail as
(
SELECT CAST('<?xml version="1.0" encoding="ISO-8859-1" ?>
<VN>
<CompanyList>
<Row num="1"><CoNum>7878</CoNum><CoName>ExampleName</CoName><DInc>1978-12-30</DInc><DDis></DDis></Row>
</CompanyList>
</VN>
' AS XML) AS xmldata
)
INSERT INTO Staging_Table
SELECT tab.col.value('DInc[1]','DATE') DInc,
tab.col.value('DDis[1]','DATE') LastARD
FROM XMLCompanyDetail
CROSS APPLY
xmldata.nodes('//VN/CompanyList/Row') AS tab(col)
SELECT * FROM Staging_table
drop table staging_table