2009-04-20 12 views
0

Ich versuche, einige SQL-Abfrage Validierung programmatisch in C# (ohne die tatsächliche Datenbank aufrufen). Im Wesentlichen möchte ich, dass ein Benutzer eine Ansicht, UDF oder SP eingeben und seine Abhängigkeiten sofort validieren kann. Der Benutzer würde diese in ein benutzerdefiniertes Werkzeug zum Definieren von Datenbankobjekten eingeben.Get Abhängigkeiten von SQL-Abfrage

Wenn also ein Benutzer eingegeben:

CREATE VIEW someView AS SELECT name, address FROM users 

Ich konnte die Abhängigkeit von „Benutzer“ herausziehen und dann prüfen, gegen meine Datenbank-Objektsammlungen, (zB im Speicher gespeichert sind, Tabellen, Views etc. ..) um sicherzustellen, dass in einem von ihnen Abhängigkeit existiert. Denken Sie daran, dass die tatsächlichen Ansichten/UDFs/SPs, die in meine benutzerdefinierte App eingegeben werden, sehr komplex sind und das Parsen selbst nicht wünschenswert ist.

Ich versuche derzeit, dies mit Microsoft.Data.Schema.ScriptDom.Sql.TSql100Parser zu tun. Dies stellt eine Analysemethode bereit, die eine DOM-Darstellung der Abfrage zurückgibt. Dies ist jedoch ein furchtbar komplexes DOM und ich muss im Wesentlichen einen ganzen Parser dafür schreiben.

Irgendwelche Ideen/Vorschläge? Vielen Dank!

+0

so einfach Sie wollen die Objekte ziehen Wird in der Abfrage verwendet? – IEnumerator

Antwort

2

Es gibt einen Proc, den Sie mit dem Namen sp_depends verwenden können ... er ist jedoch aufgrund der verzögerten Namensauflösung nicht fehlersicher. Es gibt wirklich keinen sicheren Weg, dies zu tun, ist es ein wenig besser in den neuesten Versionen bekommen, aber immer noch ein Schmerz im Nacken

diese Do you depend on sp_depends (no pun intended) lesen, was ich meine

+0

Danke für die Antwort, aber ich möchte dies tun, ohne den SQL-Server aufzurufen. Würde dies nicht mit sp_depends geschehen? – manu08

+0

@ manu08: Wie möchten Sie die Ansicht erstellen Text erstellen, ohne sql Server aufzurufen? Abgesehen davon arbeitet sp_depends nicht mit komplexen Abfragen (und auch nicht mit einfachen). –

Verwandte Themen