Ich habe eine Abfrage, die gut funktioniert, um XML-Daten (normalerweise) in eine SQL-Tabelle zu bringen. Mein aktuelles Problem ist, dass ich versucht habe, diese Abfrage mit einer viel größeren XML-Datei zu verwenden, und es maximiert meine Tempdb (und Speicherplatz) und schlägt fehl. Kann jemand helfen?SQL - Große XML-Datei maximiert TEMPDB beim Importieren
;WITH XMLNAMESPACES(DEFAULT 'http://www.adc.ca/ETS/v3')
INSERT INTO [CC-DB].[dbo].[TourTimeLogs] ([Rig],[Job],[Date],[Sheet],[Rev],[TourID],[StartTime],[EndTime],[Mins],[Code],[Detail])
SELECT
RIG = XC.value('(../../../../../../Rig/RigId)[1]', 'varchar(100)'),
JOB = XC.value('(../../../../../../JobNo)[1]', 'varchar(100)'),
DATE = XC.value('(../../../../Date)[1]', 'date'),
SHEET = XC.value('(../../../../SheetNo)[1]', 'varchar(100)'),
REV = XC.value('(../../../../Revision)[1]', 'varchar(100)'),
TOURID = XC.value('(../../@tourId)[1]', 'varchar(100)'),
STARTTIME = XC.value('(FromTime)[1]', 'datetime'),
ENDTIME = XC.value('(ToTime)[1]', 'datetime'),
MINS = datediff(minute, XC.value('(FromTime)[1]', 'datetime'), XC.value('(ToTime)[1]', 'datetime')),
TIMECODE = XC.value('(TimeCodeNo)[1]', 'varchar(100)'),
DETAIL = XC.value('(Detail)[1]', 'varchar(100)')
FROM
[CC-DB].[dbo].[XmlSourceTable] SRC
CROSS APPLY
SRC.XmlData.nodes('/ETS/WellTours/WellTour/DayTours/DayTour/Tours/Tour/TimeLogs/TimeLog') AS XT(XC)
Die Größe von Tempdb ist einstellbar und der Speicherort der Datendatei für Tempdb kann ebenfalls festgelegt werden. So können Sie Tempdb auf eine Festplatte mit genügend Speicherplatz verschieben. – usterdev
Unser Netzwerkspeicherplatz ist begrenzt, das letzte Mal habe ich das mit einer riesigen Datei versucht - tempdb ging bis zu 20GB und die Abfrage ist fehlgeschlagen. –
Wie liest man die XML-Datei in kleineren Teilen und verschiebt sie in die Datenbank? Dies kann durch eine einfache .NET-Seite erfolgen. –