XML Dateien in SQL Prozedur importieren

Jannikk

Neuer Benutzer
Beiträge
1
Hallo erstmal,

ich versuche momentan von UPS WorldShip die TrackingNumber in SAP zu implementieren.

Habe dazu auch schon etwas geschrieben eine dbo angelegt.

USE [GLOBALCONFIG]

GO

/****** Object: StoredProcedure [dbo].[UPS_SHIPMENT_IMPORT] Script Date: 21.01.2021 08:19:55 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[UPS_SHIPMENT_IMPORT] @FILE_PATH nvarchar(100)

as

DECLARE @command nvarchar(max)

BEGIN

set @command = '

WITH XMLNAMESPACES(DEFAULT ''http://www.ups.com/XMLSchema/CT/WorldShip/ImpExp/ShipmentExport/v1_0_0'')

INSERT INTO [GLOBALCONFIG].[dbo].[UPS_SHIPMENTS]

([REF1]

,[REF2]

,[TRACKINGNUMBER]

,[PACKAGEWEIGHT]

,[IMPORT_DATE]

,[IMPORT_FILENAME])

select

B.ShipmentInformation.query(''ReferenceNumbers/Reference1'').value(''.'', ''varchar(20)'')as Referenz1,

B.ShipmentInformation.query(''ReferenceNumbers/Reference2'').value(''.'', ''varchar(20)'')as Referenz2,

C.Package.query(''TrackingNumber'').value(''.'', ''varchar(100)'')as Verfolgungsnummer,

C.Package.query(''Weight'').value(''.'', ''varchar(20)'')as Gewicht,

getdate(),

''' + @FILE_PATH + '''

from

(

select cast(A as xml) from

openrowset (BULK ''' + @FILE_PATH + ''' ,SINGLE_BLOB) as T(A))as T(A)

CROSS APPLY A.nodes(''Shipments/Shipment'') as A (Shipment)

CROSS APPLY Shipment.nodes(''ShipmentInformation'') as B (ShipmentInformation)

CROSS APPLY Shipment.nodes(''Packages/Package'') as C (Package)

'

--SELECT @command

EXEC sp_executesql @command

END

Nun habe ich das Problem, dass die XML Datei jeden Tag neu exportiert wird. Das heißt dass der Name sich täglich ändert.

Meine Idee war nun eine .bat Datei zu schreiben die der Prozedur "sagt" dass sie die neuste Datei nehmen soll. Hoffe ich habe es anschaulich erklärt und mir kann hier jemand weiterhelfen.

Danke schon mal!
 
Werbung:
Ich kenne da nur von Oracle (und Postgres). Es gab irgendwann die Möglichkeit, external Table Defintions mit alter Statements zu ändern. Aber das ist glaub ich gar nicht so toll.

Wie wäre es, wenn das "Füttern" mit der XML Datei gezielt erfolgt, durch einen externen Schedule.
Also bei Eintreffen einer Datei:
- Datei in ein Archiv schreiben
- Datei in ein Import Verzeichnis mit konstantem Namen schreiben
- Import seitens DB antriggern
- Sofern ein direkter zeitlicher Zusammenhang garantierbar ist, dem Import in der DB noch einen Zeitstempel verpassen
- alternativ zum Zeitstempel eine weitere Importdatei mit Metainformationen (Originalzeit, Originaldateiname, Triggerzeitpunkt) bereitstellen und ebenfalls durch die (gleiche) SP einlesen.

Das ganze müsste selbst und MS mittels zeitgesteuertem Schedule oder eventgesteuert (sobald Datei in Verzeichnis xy >..) gehen.
Für eine konkrete Umsetzung kann ich Dir leider keine Tipps geben, weil mein MS SQL wissen etwas veraltet ist.
 
Zurück
Oben