2015-07-03 5 views
5

ich in der SQL auf eine Versionsnummer benötigen StoredProcedures und Funktionen zu wissen, welche Version verwendet jetzt und notwendig, dass oder nicht zu aktualisieren?hinzufügen oder liest Versionsnummer des SQL StoredProcedures oder Funktionen

Nach der Suche im Internet habe ich die Tabelle sys.objects aus der master-Datenbank gefunden.
sys.objects können SQL-Elemente Informationen wie dieser Code sein holen:

SELECT * 
FROM sys.objects 
WHERE TYPE   = 'P' -- StoredProcedures 
     OR TYPE  = 'FN' -- Functions 
     OR TYPE  = 'U' -- Usert Tabels 

Ergebnis:

╔══════╦═══════════╦═══════════╦══════╦═══════════╦═════════════╦═════════════╦═════╗ 
║ name ║ object_id ║ schema_id ║ type ║ type_desc ║ create_date ║ modify_date ║ ... ║ 
╚══════╩═══════════╩═══════════╩══════╩═══════════╩═════════════╩═════════════╩═════╝ 

Aber noch konnte ich nicht ein Feld mit dem Namen Version oder MetaDaten für SQL finden gespeichert Prozeduren oder Funktionen, um etwas wie Version darin zu speichern!

Meine Fragen sind:

Wie wissen, welche Versionsnummer von StoresProcedures oder Funktionen im Einsatz ist?
Und wenn existieren diese Eigenschaft, wie man es ändert?

Oder wenn es nicht existiert (Version Feld), kann ich dann sys.objects Daten programmgesteuert ändern? weil ich versuche, diesen Fehler, dass und gesehen zu ändern:

Msg 259, Level 16, State 1, Line 1
Ad hoc updates to system catalogs are not allowed.

+0

Hey, warum ist die Versionsnummer der Prozedur oder Funktion wichtig? –

+0

Ich habe viele Client von einigen Servern, wenn ich ein SP oder FN-Codes so geschrieben, dass 'drop' und' create' Skripte in aktualisieren.NET-Codes und wenn ein Client durch ein neues Skript läuft, überprüfen Sie zuerst die SP-Version auf dem Server, um zu wissen, ob SPs aktualisiert werden müssen oder nicht! und etc ... – Behzad

+0

Nur um zu verdeutlichen - Sie haben 1 Code-Basis und viele Datenbanken, die die gleichen sind (nur mit unterschiedlichen Daten)? –

Antwort

4

Well Sie den Systemkatalog aktualisieren, aber es ist sehr schmutzig, und ich werde es sowieso nicht vor.

Eine andere Idee könnte nur sein, einen Kommentar über jede Prozedur/Funktion hinzuzufügen.

Ein dynamischerer Weg kann ein DDL Trigger sein, der die Versionen automatisch zählt.

Oder wenn Sie nur jede Prozedur/Funktion in einer Datenbank auf eine Version beschränken, haben Sie möglicherweise eine DDL Trigger, die den Code für die Versionsnummer parsen wird. Danach wird dies in einer Versionstabelle protokolliert. Wenn die Version nicht vorhanden ist, führen Sie die Änderung zurück und vermeiden Sie eine Änderung. Dasselbe kann gehandhabt werden, wenn die Version für die spezifische Prozedur bereits existiert.

Aber auf jeden Fall müssen diese Lösungen erstellt werden und einige (kleine) Nebenwirkungen haben. Abhängig von ihrer Art des Designs. Aber in Ihrem Fall möchten Sie wahrscheinlich mehrere Versionen einer Prozedur haben und sich beim Aufruf jedes einzelnen anders verhalten. In diesem Fall ist die Kommentarvariante möglicherweise die einfachste und effizienteste für Ihren Anwendungsfall.

Sie können auch die extended Properties verwenden, die eingestellt werden muss. Vielleicht ist dies eine Lösung, die Sie leben möchten. Dies vermeidet jedoch keine doppelten Versionsnummern, wie in der DDL Trigger beschrieben.

Eine andere Möglichkeit, wenn Sie nur Ihren Code versionieren möchten, kann die Verwendung von GIT + SSDT sein.

+1

Ich denke, die erweiterte Methode Methode ist die richtige Methode, um eine Versionsnummer an jedes Objekt anzuhängen. Es wäre am besten, die Version auf dem System zuzuordnen, das die Quelle der Wahrheit darstellt, und die Quelle, die so gesteuert wird, dass sie den Versionsverlauf bereitstellt. –

+0

Vielen Dank für die Beantwortung meiner Fragen. Aber ich habe eine Frage: Wenn ich meine Datenbank sichern und auf anderen Systemen wiederherstellen möchte, dann sind diese erweiterten Eigenschaften auf einem anderen System vorhanden oder nicht? Mit anderen Worten, erweiterte Eigenschaft gespeichert auf Master oder myDB? – Behzad

+1

Die Eigenschaften werden in der Datenbank selbst und nicht in der Master-Datenbank gespeichert. Was bedeutet, dass Sie es sichern und wiederherstellen können, wo immer Sie wollen. Sie können die erweiterten Eigenschaften auch mit 'sys.extended_properties' in Ihrer Datenbank abfragen. – Ionic

Verwandte Themen