T-SQL Transform/Pivot XML Data to usable Data Rows using XQuery language elements

The Key to get this XML-2-Rows solution to work is to use an embedded .query(‘./Wert’) as Wert to enumerate each attribute’s value beneath a given element type dsData(b) and bsDatas(b).

Another important point is to add a ROW_NUMBER() to each value’s line to allow allocation of values between different element types.
The last WHERE statement demonstrates how values of a single row (7) or a specific element 50017 are selected.

CREATE TABLE unittest.XmlAuswertung (ID int IDENTITY(1,1) NOT NULL, XmlResult xml NOT NULL)

INSERT INTO unittest.XmlAuswertung (XmlResult)
VALUES (N'YOURXMLWITHOUT<?xml...?>HEADER');

DECLARE @xml XML;

SELECT TOP 1 @xml = XmlResult
FROM unittest.XmlAuswertung;

SELECT	  def.value('@FeldId', 'int') as DefFeldID
		, def.value('Name[1]', 'varchar(255)') as DefName
	--,	def.value('.', 'varchar(100)') as DefTitle
FROM @xml.nodes('/Auswertungsreport/Listen/Liste/Listfelder/Definition') as definitionen(def)
;

SELECT	  c.value('CountRecords[1]', 'int') as CountOfRecords
FROM @xml.nodes('/Auswertungsreport/Listen/Liste/DatenSpalten') as CountOfRecords(c)
;

--SELECT	  b.value('@FeldId', 'int') as BDFeldID
--		, b.query('./Wert') Werte
--FROM @xml.nodes('/Auswertungsreport/Listen/Liste/DatenSpalten/BaseData') as baseDatas(b)

--SELECT 
--	  bWerte.BDFeldID
--	, ROW_NUMBER() OVER ( ORDER BY ( SELECT 1 ) ) rowId
--	, w.value('.', 'nvarchar(4000)') as Wert		
--FROM 
--(
--		SELECT	  b.value('@FeldId', 'int') as BDFeldID
--				, b.query('./Wert') Werte
--		FROM @xml.nodes('/Auswertungsreport/Listen/Liste/DatenSpalten/BaseData') as baseDatas(b)
--) bWerte
--CROSS APPLY bWerte.Werte.nodes('./Wert') as Werte(w)


;WITH felder
AS
(
	SELECT	  def.value('@FeldId', 'int') as DefFeldID
			, def.value('Name[1]', 'varchar(255)') as DefName
			, def.value('FListNameShort[1]', 'varchar(50)') as DefAbk
		--,	def.value('.', 'varchar(100)') as DefTitle
	FROM @xml.nodes('/Auswertungsreport/Listen/Liste/Listfelder/Definition') as definitionen(def)
)
, werte
AS
(
	SELECT 
		  bWerte.FeldID
		, ROW_NUMBER() OVER ( PARTITION BY FeldID ORDER BY ( SELECT 1 ) ) rowId
		, w.value('.', 'nvarchar(4000)') as Wert		
	FROM 
	(
			SELECT	  b.value('@FeldId', 'int') as FeldID
					, b.query('./Wert') Werte
			FROM @xml.nodes('/Auswertungsreport/Listen/Liste/DatenSpalten/BaseData') as baseDatas(b)
	) bWerte
	OUTER APPLY bWerte.Werte.nodes('./Wert') as Werte(w)

	UNION ALL

	SELECT 
		  bWerte.FeldID
		, ROW_NUMBER() OVER ( PARTITION BY FeldID ORDER BY ( SELECT 1 ) ) rowId
		, w.value('.', 'nvarchar(4000)') as Wert		
	FROM 
	(
			SELECT	  b.value('@FeldId', 'int') as FeldID
					, b.query('./Wert') Werte
			FROM @xml.nodes('/Auswertungsreport/Listen/Liste/DatenSpalten/DatenSpalte') as dsData(b)
	) bWerte
	OUTER APPLY bWerte.Werte.nodes('./Wert') as Werte(w)

)
SELECT f.*, w.rowId, w.Wert
FROM felder f
INNER JOIN werte w	ON	w.FeldID = f.DefFeldID
WHERE w.rowId = 7
OR w.FeldID = 50017

If you select and executing all SQL text starting at DECLARE @xml XML;
The following three result sets would be returned to client.
(1) the Field Definitions Ids and Names (DefFeldID, DefName)
(2) a selected single value CountOfRecords
(3) the big result joining the Field definition and the corresponding values of <WERT>Data</Wert> in XML data.

CMD Take Ownership OF Files Recursive

Change recursively the Owner of all files and folders in the current’s folder DWH to Administrators Group:

takeown /F DWH /R /A /D Y /SKIPSL

takeown /F [FolderOrFilePattern] /R /A /D Y /SKIPSL

 

TAKEOWN [/S System [/U Benutzername [/P [Kennwort]]]]
/F Dateiname [/A] [/R [/D Aufforderung]]

Beschreibung:
Dieses Tool ermöglicht einem Administrator das Wiederherstellen des
Zugriffs auf eine Datei, für die der Zugriff durch erneutes Zuweisen
des Besitzers verweigert wurde.

Parameterliste:
/S System Bestimmt das Remotesystem mit dem eine
Verbindung hergestellt werden soll.

/U [Domäne\]Benutzer Bestimmt den Benutzerkontext, unter
dem der Befehl ausgeführt werden soll.

/P [Kennwort] Gibt das Kennwort für den jeweiligen
Benutzerkontext an. Zeigt eine Eingabe-
aufforderung an, wenn keine Eingabe
vorgenommen wurde.

/F Dateiname Gibt das Dateinamen- oder Verzeichnis-
namenmuster an. Platzhalter “*” können
verwendet werden,um das Muster anzugeben.
Ermöglicht die Angabe von Freigabename\
Dateiname.

/A Überträgt die Besitzrechte an die Gruppe
“Administratoren” anstelle des aktuellen
Benutzers.

/R Rekursiv: Weist das Tool zur Bearbeitung von
Dateien im angegebenen Verzeichnis und allen
Unterverzeichnissen an.

/D Aufforderung Standardantwort, die verwendet wird, wenn der
aktuelle Benutzer nicht die Berechtigung
“Ordner auflisten” für ein Verzeichnis hat.
Tritt bei der rekursiven Bearbeitung (/R)
von Unterverzeichnissen auf. Gültige Werte
sind “Y” zum Übernehmen der Besitzrechte
oder “N” zum Auslassen dieses Schrittes.

/SKIPSL Keiner symbolischen Verknüpfung folgen.
Nur mit “/R” zulässig.

/? Zeigt die Hilfemeldung an.

HINWEIS: 1) Wenn “/A” nicht angegeben wird, werden die Besitzrechte für
die Datei dem derzeit angemeldeten Benutzer übertragen.

2) Gemischte Muster mit “?” und “*” werden nicht unterstützt.

3) “/D” wird verwendet, um die Bestätigungsaufforderung zu
unterdrücken.

Beispiele:
TAKEOWN /?
TAKEOWN /F Dateiname
TAKEOWN /F \\system\share\lostfile /A
TAKEOWN /F directory /R /D N
TAKEOWN /F directory /R /A
TAKEOWN /F *
TAKEOWN /F C:\Windows\System32\acme.exe
TAKEOWN /F %windir%\*.txt
TAKEOWN /S System /F EigeneFreigabe\Acme*.doc
TAKEOWN /S System /U Benutzer /F EigeneFreigabe\EigeneBinärdatei.dll
TAKEOWN /S System /U Domäne\Benutzer /P Kennwort /F Freigabe\Dateiname
TAKEOWN /S System /U Benutzer /P Kennwort /F Dokumente\Report.doc /A
TAKEOWN /S System /U Benutzer /P Kennwort /F EigeneFreigabe\*
TAKEOWN /S System /U Benutzer /P Kennwort /F Startseite\Anmelden /R
TAKEOWN /S System /U Benutzer /P Kennwort /F EigeneFreigabe\Verzeichnis
/R /A