Dav*_*ein 93 t-sql sql-server-2000
我知道这一定很简单,但是我如何通过检查来创建一个函数来查看它是否已经存在?如果它存在,我想删除并重新创建它.
adr*_*nks 175
IF EXISTS (
SELECT * FROM sysobjects WHERE id = object_id(N'function_name')
AND xtype IN (N'FN', N'IF', N'TF')
)
DROP FUNCTION function_name
GO
Run Code Online (Sandbox Code Playgroud)
如果你想避免使用sys*表,你可以改为(从例子A中这里):
IF object_id(N'function_name', N'FN') IS NOT NULL
DROP FUNCTION function_name
GO
Run Code Online (Sandbox Code Playgroud)
要捕获的主要内容是您要删除的函数类型(在FN,IF和TF的顶部sql中表示):
Spa*_*rky 22
if object_id('FUNCTION_NAME') is not NULL
DROP FUNCTION <name>
Run Code Online (Sandbox Code Playgroud)
您还可以在sysobjects中查找名称
IF EXISTS (SELECT *
FROM sysobjects
WHERE name='<function name>' and xtype='FN'
Run Code Online (Sandbox Code Playgroud)
实际上,如果函数可以是表函数,则需要使用
xtype in ('FN','TF')
Run Code Online (Sandbox Code Playgroud)
Met*_*hor 11
这适用于任何对象,而不仅仅是函数:
IF OBJECT_ID('YourObjectName') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
然后只需添加你的对象味道,如:
IF OBJECT_ID('YourFunction') IS NOT NULL
DROP FUNCTION YourFunction
Run Code Online (Sandbox Code Playgroud)
小智 9
您有两个选项可以在SQL Server 2016中删除并重新创建该过程.
从SQL Server 2016开始 - 使用"IF EXISTS"
DROP FUNCTION [ IF EXISTS ] { [ schema_name. ] function_name } [ ,...n ] [;]
Run Code Online (Sandbox Code Playgroud)
从SQL Server 2016 SP1开始 - 使用"OR ALTER"
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
Run Code Online (Sandbox Code Playgroud)
您SQL Server 2016 CTP3可以使用新的DIE 语句而不是大IF包装器
句法 :
删除函数 [ IF EXISTS ] { [ schema_name. ] 函数名 } [ ,...n ]
询问:
DROP Function IF EXISTS udf_name
Run Code Online (Sandbox Code Playgroud)
更多信息请点击此处
IF EXISTS
(SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'functionName')
AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION functionName
GO
Run Code Online (Sandbox Code Playgroud)