我們爲您在我們所有的數據庫對象到源代碼控制,rerunnable腳本(視圖,函數,觸發器&存儲過程等)以下列方式創建SQL Server存儲過程的缺點是什麼?
當談到時間部署,我們需要確保所有的腳本重新-runnable &可重複,以便存儲過程被創建/更新到最新版本。
以下列方式創建腳本有什麼缺點嗎?
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
本質上的腳本檢查是否在相關的系統視圖中存在的對象,如果它不存在,一些動態SQL創建它作爲存根,以避開CREATE PROCEDURE/GO
陳述問題沒有被允許在條件塊。然後它通過ALTER
應用腳本的實際功能。
所以好處對我來說是顯而易見的,我只是想知道這樣做有什麼不利之處......除了編寫稍微更冗長的腳本的輕微開銷之外。
根據您的說法,您可能會得到一些近距離/主觀投票,而且這可能更適合DBA,但我覺得這是一個有趣的解決方案,可以解決我們在之前的公司中遇到的問題。 – Joe
嗯,我想我正在尋找合法的技術「缺點」......即是否有任何技術上的理由「DROP/CREATE」而不是「ALTERING」? 「ALTERS」能否對執行計劃等產生任何影響...... –
SQL Server差不多已經有20年的歷史了,他們還沒有開始實施'CREATE OR REPLACE'命令。 – SWeko