我正在使用 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
我遇到的问题是“Create”必须在脚本中首先出现(或在“GO”之后首先出现),但我不能将“GO”放在“If”条件中。有没有办法有条件地创建不存在的东西,然后再改变它?
您不能放入
CREATE FUNCTION
内部IF
逻辑,因为它需要在自己的批次中。我会这样做。如果该函数尚不存在,请创建一个空存根。现在你总是可以安全地发布一个改变。
不幸的是,我知道没有简单的方法可以让 SSMS 以这种方式为您编写脚本,即使通过 SMO 或其他方法这样做也会很痛苦恕我直言。仅仅因为函数必须是同一类型(IF、TVF、MSTVF),所以您的简单存根不可能总是相同的。
如果支持 SQL Server
CREATE OR REPLACE
不是很好吗?