1


0

SQL Server 2008-XMLをテーブルに細断するには、UNKNOWN DATE値をNULLのままにしておく必要があります

誰か助けてもらえないかな

SQL Server2008でXMLデータ型のテーブルにXMLドキュメントを正常にインポートできましたが、そのテーブルからステージングテーブルに細断しようとすると、日付が入力されていないDATE値がステージングテーブルに挿入されます1900-01-01として。

これをやめ、代わりに単にNULLを挿入するために欠けているクリーバーの方法はありますか? ステージングテーブルでNULLIFを使用し、1900-01-01をnullに置き換えることもできますが、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の例を参照してください

7878ExampleName1978-12-30

日付DDISはNULLである必要がありますが、ステージングテーブルにインポートするときは、代わりに1901-01-01を挿入します。

意味を示すためにコードを更新しました

create table staging_table
(DInc DATE NULL, LastARD DATE NULL);

with XMLCompanyDetail as
(
SELECT CAST('


7878ExampleName1978-12-30


' 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

2 Answer


1


代わりに `datetime`を使用してみてください:

declare @xml xml
set @xml = ''

select @xml.value('LastDate[1]','datetime')

待って、これは `null`を返します。 つまり、ステージングテーブルに挿入すると、この「null」値はそのステージングテーブルのデフォルト設定によってオーバーライドされます。 そのため、この動作を発生させたくない場合は削除してください。


1


編集

質問の更新後、次のように動作しますが、より良い方法があるかどうかはわかりません。

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)