Unser Team hat zum ersten Mal das Problem erlebt, keine Versionskontrolle für unsere Datenbank zu haben. Wie können Stored Procedures mindestens zur Versionskontrolle hinzugefügt werden? Das aktuelle System, das wir entwickeln, basiert hauptsächlich auf SPs.Wie Stored Procedures zur Versionssteuerung hinzugefügt werden
Antwort
Hintergrund: Ich entwickle ein System mit fast 2000 gespeicherten Prozeduren.
Das kritische Ding, das ich gefunden habe, ist, die Datenbank als eine Anwendung zu behandeln. Sie würden niemals eine EXE mit einem Hexeditor direkt öffnen und bearbeiten. Das Gleiche mit einer Datenbank; Nur weil Sie die gespeicherten Prozeduren aus der Datenbank bearbeiten können, heißt das nicht, dass Sie es sollten.
Behandeln Sie die Kopie der gespeicherten Prozedur in der Quellcodeverwaltung als die aktuelle Version. Es ist dein Quellcode. Checken Sie es aus, bearbeiten Sie es, testen Sie es, installieren Sie es und checken Sie es ein. Wenn Sie das nächste Mal ändern müssen, gehen Sie genauso vor. So wie eine Anwendung einen Build- und Deploy-Prozess erfordert, sollten auch die gespeicherten Prozeduren funktionieren.
Der folgende Code ist eine gut gespeicherte Prozedurvorlage für diesen Prozess. Es behandelt beide Fälle eines Updates (ALTER
) oder einer neuen Installation (CREATE
).
IF EXISTS(SELECT name
FROM sysobjects
WHERE name = 'MyProc' AND type = 'P' AND uid = '1')
DROP PROCEDURE dbo.MyProc
GO
CREATE PROCEDURE dbo.MyProc
AS
GO
jedoch folgendes Beispiel ist besser in Situationen, in denen Sie den Zugriff auf die gespeicherten Prozeduren steuern. Die DROP
- CREATE
Methode verliert GRANT
Information.
Darüber hinaus kann das Erstellen eines Prozesses zum vollständigen Erstellen der Datenbank aus der Quellcodeverwaltung dazu beitragen, die Dinge kontrolliert zu halten.
Erstellen Sie eine neue Datenbank aus der Quellcodeverwaltung. Verwenden Sie ein Tool wie Red Gate SQL Compare, um die beiden Datenbanken zu vergleichen und Unterschiede zu identifizieren. Vereinbaren Sie die Unterschiede.
Eine billigere Lösung besteht darin, einfach die Funktion "Skript als" von SQL Management Studio zu verwenden und einen Textvergleich durchzuführen. Diese Methode ist jedoch sehr empfindlich auf die genaue Methode, die SSMS verwendet, um das extrahierte SQL zu formatieren.
Interessant, ich habe Red Gate noch nicht gesehen. Ich werde es sehen sehen. Es ist schwierig, alle in Schach zu halten, obwohl – Jonn
@Darryl - SQL Server das zweite Beispiel nicht mögen wird, weil "CREATE PROCEDURE" die erste Anweisung im Stapel sein muss. –
Eine weitere günstigere Option ist JetBrains 'PhpStorm (und möglicherweise auch andere aus der * Storm-Reihe), die ein überraschend gutes Datenbankvergleichstool enthält. Es ist auch ein anständiger Editor mit Autocomplete für verschiedene SQL-Varianten. – Aron
Wir fügen Sie einfach die CREATE
Anweisung Steuerung in einer SQL-Datei zu beziehen, zB:
-- p_my_sp.sql
CREATE PROCEDURE p_my_sp
AS
-- Procedure
Vergewissern Sie sich, dass Sie ein SP nur pro Datei setzen, und dass der Dateiname entspricht genau den Namen Verfahren (es macht es so viel einfacher, die Prozedur in der Quellcodeverwaltung zu finden)
Sie müssen dann nur diszipliniert werden, wenn Sie keine gespeicherte Prozedur auf Ihre Datenbank anwenden, die nicht aus der Quellcodeverwaltung stammt. Eine Alternative wäre, den SP als eine ALTER
-Anweisung zu speichern - dies hat den Vorteil, dass es das Aktualisieren einer vorhandenen Datenbank erleichtert, aber bedeutet, dass Sie einige Optimierungen vornehmen müssen, um eine neue leere Datenbank zu erstellen.
Ich denke, es ist gut, jede gespeicherte Prozedur in eine separate .sql-Datei zu scripten und diese Dateien dann nur in die Quellcodeverwaltung zu übertragen. Jedes Mal, wenn ein Sproc geändert wird, aktualisieren Sie das Erstellungsskript - dies gibt Ihnen den vollen Versionsverlauf auf einer Sproc-Basis.
Es gibt SQL Server-Tools zur Quellcodeverwaltung, die sich in SSMS einklinken, aber ich denke, dass sie nur die db-Objekte scripten und diese Skripte festschreiben. Red Gate scheint in diesem Jahr zum Beispiel auf releasing such a tool zurückzuführen zu sein.
Sie sind zu Zeiten gespeichert, Aber es gab Situationen, die darauf hindeuten, dass nicht alle Programmierer sich ständig daran erinnern. – Jonn
Ich habe an diesem Werkzeug für genau diesen Zweck gearbeitet.
Der Weg, sicherzustellen, dass niemand ihre aktualisierten .sql-Dateien eincheckt, besteht darin, dass Ihr Build-Server die Staging- und Live-Umgebungen dazu zwingt, die Quellcodeverwaltung anzupassen (was Ihnen dieses Tool behilflich ist).
Ich würde definitiv ein Drittanbieter-Tool empfehlen, das in SSMS integriert ist. Abgesehen von der oben erwähnten SQL-Quellcodeverwaltung können Sie auch SQL Version von Apex ausprobieren.
Wichtig ist, dies für Entwickler wirklich einfach zu machen, wenn Sie möchten, dass sie es verwenden, und der beste Weg ist, ein Werkzeug zu verwenden, das in SSMS integriert ist.
Die zweite Lösung von @Darryl funktionierte nicht wie von @Moe vorgeschlagen. Ich änderte @ Darryls Vorlage und ich habe es funktioniert, und dachte, es wäre schön, es mit allen zu teilen.
IF NOT EXISTS(SELECT name FROM sysobjects
WHERE name = '<Stored Proc Name>' AND type = 'P' AND uid = '1')
EXEC sp_executesql N'CREATE PROCEDURE dbo.<Stored Proc Name>
AS
BEGIN
select ''Not Implemented''
END
'
GO
ALTER PROCEDURE dbo.<Stored Proc Name>
AS
BEGIN
--Stored Procedure Code
End
Das ist wirklich nett, weil ich meine gespeicherten Prozedurberechtigungen nicht verliere.
- 1. Alternative zu Stored Procedures
- 2. WebMatrix und Stored Procedures
- 3. C# Stored Procedures
- 4. ASP.NET C# & Stored Procedures
- 5. Stored Procedures Reverse Engineering
- 6. SQL Unit Testing Stored Procedures
- 7. SQL Stored Procedures Parameternamen Abfrage
- 8. Wie Stored Procedures mit Doctrine2 und MySQL ausgeführt werden
- 9. MySQL - Stored Procedures Syntax Problem
- 10. Bearbeiten von SQL-Stored Procedures
- 11. MySQL Stored Procedures Syntax Fehler
- 12. 2008 SQL EXPRESS Stored Procedures - mir fehlen
- 13. Wie Stored Procedures verwenden w/ASP.NET Datagrid
- 14. MySql Stored Procedures, Transaktionen und Rollbacks
- 15. Sets Based Operations and calling Stored Procedures
- 16. Visual Studio stampfen auf Linq Stored Procedures
- 17. MYSQL Stored Procedures Wenn Anweisung Problem
- 18. SQL Stored Procedures zwischen DataSources/Schemas kopieren?
- 19. SQL Stored procedures wenn Anweisung innerhalb wählen
- 20. Entwickeln von MySQL Stored Procedures mit Intellisense?
- 21. [MySQL]: Stored Procedures und Select-Anweisungen
- 22. Oracle Stored Procedures in SubSonic 2.2
- 23. Bietet Firebase Database Funktionen wie Ereignisse, Trigger und Stored Procedures?
- 24. Fehler beim Aufrufen von Stored Procedures von EntityFramework
- 25. Wie kann ich Stored Procedures mit EF Code-First verwenden?
- 26. Wie kann ich Kommentarblöcke automatisch SQL Stored Procedures voranstellen?
- 27. Wie führe ich SQL Stored Procedures aus einer anderen Stored Procedure aus?
- 28. In MySQL Stored Procedures überprüfen, ob eine lokale Variable
- 29. Deployment-Konfiguration - Führen Sie nur neue und geänderte Stored Procedures
- 30. Optimistische Parallelität mit Stored Procedures in Entity Framework
Ähnliche Beiträge: http://stackoverflow.com/questions/146543/what-is-the-best-way-to-version-control-my-sql-server-stored-procedures –