Wir in alle unsere Datenbank überprüfen Objekte in die Quellcodeverwaltung als rerunnable Skripte (Ansichten, Funktionen, Trigger & gespeicherte Prozeduren etc ...)Was sind die Nachteile beim Erstellen von gespeicherten SQL Server-Prozeduren auf die folgende Weise?
Wenn es darum geht, Zeit zu implementieren, müssen wir sicherstellen, dass alle Skripte sind re -runable & wiederholbar, damit eine gespeicherte Prozedur auf die neueste Version erstellt/aktualisiert wird.
Gibt es Nachteile beim Erstellen der Skripts auf folgende Weise.
IF NOT EXISTS
(
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'dbo'
AND ROUTINE_NAME = 'MyStoredProcedure'
)
BEGIN
EXEC ('CREATE PROCEDURE [dbo].[MyStoredProcedure] AS SELECT 1')
-- ALSO DO ANY INITIAL GRANT PRIVILEGE SCRIPTING HERE
END
GO
ALTER PROCEDURE [dbo].[MyStoredProcedure] (
@param1 INT,
@param2 NVARCHAR(50) = 'Default String'
)
AS
BEGIN
-- DO SOMETHING WITH @param1 AND @param2
SELECT 1;
END
GO
Im Wesentlichen überprüft das Skript, um zu sehen, ob das Objekt in der jeweiligen Systemansicht vorhanden ist, und wenn es einige dynamischen SQL erstellt nicht vorhanden ist, es als Stub in bedingten erlaubt zu umgehen CREATE PROCEDURE/GO
Aussage Probleme nicht werden Blöcke. Dann wendet es die tatsächliche Funktionalität des Skripts über eine ALTER
an.
So sind die Vorteile für mich offensichtlich, ich frage mich nur, gibt es irgendwelche Nachteile, dies zu tun ... abgesehen von dem kleinen Overhead des Schreibens etwas mehr ausführliche Skripte.
Sie werden wahrscheinlich einige nahe/subjektive Stimmen bekommen, basierend darauf, wie Sie das formuliert haben, und das ist vielleicht besser für DBA geeignet, aber ich finde das eine interessante Lösung für ein Problem, das wir bei einem früheren Unternehmen hatten. – Joe
Nun, ich denke, ich suche nach legitimen technischen "Schattenseiten" ..., d. H. Gibt es irgendwelche technischen Gründe für 'DROP/CREATE' anstatt für' ALTERING'? Könnten 'ALTERS' irgendwelche Auswirkungen auf Ausführungspläne usw. haben ... –
Es ist eine Schande, dass der SQL Server fast zwei Jahrzehnte alt ist und immer noch nicht dazu gekommen ist, einen Befehl 'ERSTELLEN ODER ERSETZEN' zu implementieren. – SWeko