Sql-Server
如何創建一個對象然後改變它
我正在使用 sql server 2012:
我想編寫一個對象的創建腳本(如果它首先不存在),然後改變它。
我試圖避免通常的刪除/創建,因為它會影響統計數據。它還與我們如何編寫對數據庫的更改腳本有關。
我擁有的:
Go If object_id(N'My_Function', N'FN') IS NULL Begin Create Function My_Function ( @SomeParameter int ) Returns int As Begin -- Intentionally empty End End Go -- A header/comments Alter Function My_Function ( @SomeParameter int ) Returns int As Begin Declare @returnValue int -- A bunch of sql code Return @returnValue End Go
我遇到的問題是“創建”必須在腳本中首先出現(或在“GO”之後),但我不能將“GO”放在“If”條件中。有沒有辦法有條件地創建一些東西,如果它不存在,然後再改變它?
您不能放入
CREATE FUNCTION
內部IF
邏輯,因為它需要在自己的批次中。我會這樣做。如果該函式尚不存在,請創建一個空存根。現在,您始終可以安全地發出更改。
IF OBJECT_ID('dbo.function_name') IS NULL BEGIN DECLARE @sql NVARCHAR(MAX) = N'CREATE FUNCTION dbo.function_name() RETURNS INT AS BEGIN RETURN (1); END'; EXEC sp_executesql @sql; END ALTER FUNCTION dbo.function_name ( ... more complex logic here ...
不幸的是,我知道沒有簡單的方法可以讓 SSMS 以這種方式為您編寫腳本,即使通過 SMO 或其他方法這樣做也會很痛苦恕我直言。僅僅因為函式必須是相同的類型(IF、TVF、MSTVF),所以你的簡單存根不能總是相同的。