Sql-Server

如何創建一個對象然後改變它

  • January 9, 2018

我正在使用 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),所以你的簡單存根不能總是相同的。

如果支持 SQL ServerCREATE OR REPLACE不是很好嗎?

引用自:https://dba.stackexchange.com/questions/33113