如何检查 SQL 数据库中是否存在函数?

新手上路,请多包涵

我需要找出一个函数是否存在于数据库中,以便我可以删除它并再次创建它。它基本上应该类似于我用于存储过程的以下代码:

 IF EXISTS (
     SELECT  *
     FROM    dbo.sysobjects
     WHERE   id = OBJECT_ID(N'[dbo].[SP_TEST]')
             AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )

原文由 Dr. Greenthumb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 856
2 个回答

这是 SSMS 在您使用 DROP and CREATE 选项编写脚本时使用的内容

IF EXISTS (SELECT *
           FROM   sys.objects
           WHERE  object_id = OBJECT_ID(N'[dbo].[foo]')
                  AND type IN ( N'FN', N'IF', N'TF', N'FS', N'FT' ))
  DROP FUNCTION [dbo].[foo]

GO

这种部署更改的方法意味着您需要重新创建对象的所有权限,因此您可能会考虑 ALTER -ing if Exists 代替。

原文由 Martin Smith 发布,翻译遵循 CC BY-SA 3.0 许可协议

我知道这个帖子很旧,但我只是想为那些认为 AlterDropCreate 更安全的人添加这个答案。下面将 Alter Function 如果存在或 Create 如果不存在:

   IF NOT EXISTS (SELECT *
               FROM   sys.objects
               WHERE  object_id = OBJECT_ID(N'[dbo].[foo]')
                      AND type IN ( N'FN', N'IF', N'TF', N'FS', N'FT' ))
       EXEC('CREATE FUNCTION [dbo].[foo]() RETURNS INT AS BEGIN RETURN 0 END')
  GO
  ALTER FUNCTION [dbo].[foo]
  AS
  ...

原文由 jamiedanq 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进