SQL Server-Datenherkunft ist die Spaltenübersicht, die zeigt, wie Daten durch Ihren T-SQL-Code fließen: welche Quellspalten die einzelnen Zieltabelle, Sichten oder Berichte speisen und was dabei in gespeicherten Prozeduren und temporären Tabellen geschieht. VERSCHMELZEN Anweisungen und dynamisches SQL. Gudu SQLFlow Diese Zuordnung wird automatisch erstellt, indem T-SQL mit einem dedizierten SQL Server-Prozedurparser analysiert wird, sodass die Herkunft nicht auf Objektebene endet, wie es bei SSMS-Abhängigkeitsansichten der Fall ist.
Probieren Sie es jetzt aus: Fügen Sie eine T-SQL-gespeicherte Prozedur in die kostenloser SQL Server Lineage Visualisierer und erhalten Sie in Sekundenschnelle ein Stammbaumdiagramm auf Spaltenebene.
Warum die Datenherkunftsanalyse in SQL Server schwieriger ist als sie aussieht
In den meisten SQL-Server-Umgebungen befindet sich die eigentlich relevante Transformationslogik nicht in bereinigten Sichten. Sie ist in gespeicherten Prozeduren enthalten, die Daten für die weitere Verarbeitung bereitstellen. #temp Tabellen, Upsert in Faktentabellen mit VERSCHMELZEN, Verzweigungen anhand von Parametern durchführen und SQL-Zeichenketten zur Laufzeit zusammensetzen mit sp_executesql oder EXEJeder Ansatz zur Herkunftsbestimmung, der lediglich Objektdefinitionen aus dem Katalog liest, betrachtet die Prozedur als Blackbox: Er weiß, dass die Prozedur existiert, aber nicht, welche Spalten durch sie fließen.
Um die tatsächliche Herkunft dieses Codes zu ermitteln, muss T-SQL so geparst werden, wie es die Datenbank-Engine tut: Es wird ein semantisches Modell jeder Anweisung im Prozedurrumpf erstellt, Spalten werden beim Durchlaufen von temporären Tabellen und Tabellenvariablen verfolgt und das in Zeichenkettenvariablen verborgene SQL wird aufgelöst. Dies ist ein Compilerproblem, kein Problem der Metadatenabfrage, und genau dafür wurde der T-SQL-Parser von SQLFlow entwickelt.
Was SSMS-Abhängigkeitsansichten Ihnen sagen können und was nicht
SQL Server bietet nützliche Tools zur Abhängigkeitsanalyse und ist der richtige erste Anlaufpunkt für schnelle Fragen auf Objektebene. sys.sql_expression_dependencies, sys.dm_sql_referenced_entitiesDer Dialog „Abhängigkeiten anzeigen“ in SSMS zeigt Ihnen zuverlässig an, dass Prozedur A auf Tabelle B verweist. Was er Ihnen nicht mitteilen kann:
- Datenfluss auf Spaltenebene. Katalogabhängigkeiten enden auf Objektebene. Sie zeigen, dass
usp_load_fact_salesBerührungenstaging.salesUnddw.fact_salesaber nicht dasfact_sales.amountwird abgeleitet vonstaging.sales.amountdurch einGIESSENwährendstaging.sales.load_dateEs werden nur Zeilen gefiltert. - Fließrichtung. Eine Referenz ist kein Datenfluss. Das Lesen und Schreiben aus einer Tabelle erzeugt dieselbe Abhängigkeitszeile; die Datenherkunft muss wissen, welche Zeile Quelle und welche Ziel ist.
- Dynamisches SQL. Anweisungen, die in einem String erstellt und ausgeführt werden
sp_executesqloderEXEsind für den Abhängigkeitskatalog völlig unsichtbar, da sie erst zur Laufzeit existieren. - Temporäre Tabellensprünge.
#tempTische leben intempdbund werden nicht als Abhängigkeitsendpunkte verfolgt, sodass jede Abstammungslinie, die über einen solchen Endpunkt verläuft, halbiert wird.
Um Fragen wie „Welche Folgefehler entstehen, wenn ich diese Spalte neu eingebe?“ oder „Welche Quellfelder speisen diesen regulierten Bericht?“ zu beantworten, muss der T-SQL-Code selbst analysiert werden. Genau diese Ebene fügt SQLFlow den bereits im Katalog enthaltenen Funktionen hinzu.
Wie SQLFlow die Herkunft von T-SQL-Prozeduren nachverfolgt
SQLFlow basiert auf Allgemeiner SQL-Parser (GSP), a commercial SQL compiler front-end developed since the mid-2000s and validated against roughly 13,600 per-dialect SQL test fixtures. Its SQL Server support is a dedicated T-SQL grammar, not a generic ANSI parser with exceptions bolted on, and it includes a full procedural parser for stored procedure bodies. Inside a procedure, SQLFlow resolves:
- Temporäre Tabellen und Tabellenvariablen. Spalten werden verfolgt durch
SELECT ... INTO #staging,INSERT INTO @rowsund jeder nachfolgende Lesevorgang, also eine dreistufige Pipeline durchtempdberscheint als ein einziger, ununterbrochener Abstammungspfad. VERSCHMELZENAussagen. JedeWENN ÜBEREINSTIMMUNG, DANN AKTUALISIERENUndWENN KEINE ÜBEREINSTIMMUNG PASST, DANN EINFÜGENDer Zweig wird analysiert, wobei Quellspalten Zielspalten zugeordnet und die entsprechenden Daten behandelt werden.ANBedingung als indirekte Abstammung.- Dynamisches SQL. SQL wird in Variablen zusammengesetzt und ausgeführt über
sp_executesqloderEXEwird aufgelöst und analysiert, anstatt übersprungen zu werden – einer der häufigsten blinden Flecken bei der Analyse von Herkunftsdaten. - Verfahrensparameter. Die Herkunft der Parameterwerte wird in die Anweisungen, die sie verwenden, nachvollziehbar dargestellt.
- Das Anrufdiagramm. Wenn Prozeduren andere Prozeduren aufrufen, rendert SQLFlow einen interaktiven Prozedur-zu-Prozedur-Aufrufgraphen, sodass Sie die gesamte ETL-Kette sehen können und nicht nur eine Prozedur nach der anderen.
Beispielrechnung: Staging zur Faktentabelle via MERGE
Hier ist die Art von Prozedur, die jedes SQL-Server-Data-Warehouse enthält – eine Ladeprozedur, die Staging-Zeilen in eine temporäre Tabelle speichert und sie dann in eine Faktentabelle zusammenführt:
CREATE PROCEDURE dbo.usp_load_fact_sales AS BEGIN SELECT s.order_id, s.customer_id, CAST(s.amount AS DECIMAL(18,2)) AS amount INTO #clean_sales FROM staging.sales s WHERE s.load_date = CAST(GETDATE() AS DATE); MERGE dw.fact_sales AS tgt USING #clean_sales AS src ON tgt.order_id = src.order_id WHEN MATCHED THEN UPDATE SET tgt.amount = src.amount WHEN NOT MATCHED THEN INSERT (order_id, customer_id, amount) VALUES (src.order_id, src.customer_id, src.amount); END
Führen Sie dies durch SQLFlow, und das Diagramm zeigt Folgendes an: dw.fact_sales.amount gespeist von staging.sales.amount durch ein GIESSEN, mit #clean_sales Als Zwischenschritt sichtbar. Es zeigt außerdem zwei Beziehungen, die eine Katalogabfrage niemals erzeugen kann: staging.sales.load_date als indirekte Herkunft in jede Ausgabespalte (es entscheidet, welche Zeilen geladen werden), und Bestellnummer doppelte Funktion – direkte Abstammung in den eingefügten Schlüssel und indirekte Abstammung durch den VEREINIGEN ... AN Übereinstimmungsbedingung.
Direkte vs. indirekte Abstammung in T-SQL
SQLFlow unterscheidet direkte Abstammung (Der Wert einer Quellspalte landet in einer Zielspalte) indirekte Abstammung (eine Spalte formt das Ergebnis durch eine WO Klausel, VERBINDEN oder VERBINDEN MIT Zustand, GRUPPE NACH(oder aggregieren). Die beiden können im Diagramm separat umgeschaltet werden. Dies ist bei T-SQL wichtiger als bei den meisten anderen Dialekten, da Ladeprozeduren viele Filterspalten enthalten – Batch-Datum, Statuskennzeichen, Wasserzeichenspalten –, die zwar nie in der Ausgabe erscheinen, aber im Hintergrund steuern, welche Daten ankommen. Die meisten Datenherkunftsanalyse-Tools bilden diese Unterscheidung überhaupt nicht ab; bei der Auswirkungsanalyse einer Ladeprozedur ist es oft genau diese Hälfte, die Probleme verursacht.
SQL Server-Herkunft ermitteln: Eingaben und Bereitstellung
Es gibt verschiedene Möglichkeiten, SQL Server-Code an SQLFlow zu übergeben, je nachdem, wie stark Ihre Umgebung abgesichert ist:
| Eingang | So funktioniert es | Gut für |
|---|---|---|
| T-SQL einfügen oder hochladen | Skripte, DDL-Anweisungen und Prozedurdefinitionen als Dateien oder eingefügter Text | Schnelle Analyse, Code-Überprüfung, ein Vorgang nach dem anderen |
| Live-Metadaten über JDBC | SQLFlow ruft DDL-, Ansichts- und Prozedurdefinitionen aus der Instanz ab. | Vollständige Datenbankherkunft, die stets aktuell bleibt |
| Grabit-Metadatenextraktion | Das Offline-Extraktionsprogramm sendet Metadaten an SQLFlow. | Umgebungen, in denen der Lineage-Server die Datenbank nicht erreichen kann. |
Die Analyse ist in jedem Fall statisch: SQLFlow liest SQL-Code und Schema-Metadaten, niemals die Zeilen Ihrer Tabellen. Für regulierte Umgebungen SQLFlow vor Ort Die Anwendung läuft in Docker oder Kubernetes innerhalb Ihres Netzwerks – bei Bedarf auch isoliert – sodass der T-SQL-Quellcode Ihre Infrastruktur niemals verlässt. Enterprise-Bereitstellungen scannen Datenbanken mit über 100 Datenbanken und mehr als einer Million Spalten inkrementell im Batch-Verfahren und exportieren die Datenherkunft nach DataHub, Microsoft Purview und OpenMetadata, sodass die SQL-Server-Daten in Ihren bestehenden Katalog fließen können. PreiseDie Cloud-Edition ist kostenlos (Premium: 1 TP3T49,99/Monat); die On-Premise-Version kostet 1 TP3T500/Monat oder einmalig 1 TP3T4.800 pro Datenbanktyp – Details finden Sie hier. Preisseite.
Wie sieht es mit Open-Source-Parsern und Katalogplattformen aus?
Open-Source-Bibliotheken wie sqllineage Und sqlglot Einzelne Abfragen lassen sich gut parsen, und für einfache SELECT- und INSERT-Anweisungen reichen sie möglicherweise völlig aus. Bei T-SQL-Prozedurencode taut die Lücke auf: Prozedurrümpfe mit Kontrollfluss, #temp Tabellenstatus über Anweisungen hinweg, VERSCHMELZEN Zweiganalyse und dynamische SQL-Auflösung sind komplexe Aspekte der Parserentwicklung, die generische Tools oft umgehen. Katalogbasierte Plattformen eignen sich hervorragend zur Organisation von Metadaten über viele Systeme hinweg. Für die Spaltenherkunftsnachverfolgung durch gespeicherte Prozeduren benötigen sie in der Regel eine zugrundeliegende Parsing-Engine – genau diese Rolle übernimmt SQLFlow, entweder als eigenständige Lösung oder als Datenquelle für diese Plattformen. Der beste Test: Führen Sie Ihre längste Produktionsprozedur mit jedem der genannten Tools aus.
Verwandte Stammbaumführer
- Azure SQL-Datenherkunft — die gleiche T-SQL-Analyse wird auf Azure SQL-Datenbank und verwaltete Instanz angewendet.
- Oracle-Tool zur Datenherkunftsanalyse — PL/SQL-Prozedur-Historie, das Oracle-Pendant zu dieser Seite.
- Überblick über SQL-Datenherkunftstools — wie SQLFlow in allen 39 unterstützten Dialekten funktioniert.
Häufig gestellte Fragen
Kann SQLFlow die Herkunft von dynamischem SQL in SQL Server nachverfolgen?
Ja. SQL wurde in String-Variablen zusammengesetzt und ausgeführt mit sp_executesql oder EXE Die Auflösung und Auswertung erfolgt innerhalb der Prozeduranalyse, sodass die betroffenen Tabellen und Spalten im Herkunftsdiagramm erscheinen. Katalogbasierte Abhängigkeitsansichten können dynamisches SQL überhaupt nicht sehen.
Kann SQLFlow #temp-Tabellen und Tabellenvariablen verarbeiten?
Ja. Spalten werden verfolgt durch #temp Tabellen und Tabellenvariablen über Anweisungen hinweg, sodass eine Pipeline, die Daten in tempdb wird als ein durchgehender Pfad auf Spaltenebene von der Quelltabelle zum endgültigen Ziel angezeigt.
Worin unterscheidet sich dies von Ansichtsabhängigkeiten in SSMS?
SSMS-Abhängigkeitsansichten melden Objektverweise: Prozedur A erwähnt Tabelle B. SQLFlow analysiert die T-SQL-Blöcke und meldet den Datenfluss auf Spaltenebene mit Richtung – welche Quellspalten welche Zielspalten speisen, durch welche Transformationen – einschließlich Flüssen durch temporäre Tabellen. VERSCHMELZENund dynamisches SQL, das vom Katalog nicht erfasst wird.
Benötigt SQLFlow Zugriff auf meine SQL Server-Daten?
Nein. SQLFlow führt eine statische Analyse von SQL-Code durch und liest optional Schema-Metadaten wie Tabellen- und Prozedurdefinitionen. Es liest niemals Tabellenzeilendaten, und die On-Premise-Edition hält den SQL-Text innerhalb Ihres Netzwerks.
Kann ich sehen, welche gespeicherten Prozeduren welche anderen aufrufen?
Ja. SQLFlow rendert einen interaktiven Aufrufgraphen der Prozeduraufrufe zusammen mit der Spaltenherkunft, sodass Sie eine ETL-Kette mit mehreren Prozeduren von Anfang bis Ende durchlaufen können.
Gibt es eine kostenlose Möglichkeit, SQL Server Lineage auszuprobieren?
Ja. SQLFlow Cloud Es gibt eine kostenlose Version: Fügen Sie T-SQL-Code in den Browser ein und erhalten Sie ein Spalten-Historiendiagramm. Die Premium-Version kostet $49,99/Monat und bietet Zugriff auf größere Datenmengen sowie API-Zugriff.
Erstellen Sie jetzt eine Übersicht über die SQL-Server-Historie.
Fügen Sie Ihre komplizierteste gespeicherte Prozedur in den kostenlosen Visualisierer ein oder sprechen Sie mit uns über die Durchsuchung Ihrer gesamten SQL-Server-Umgebung.