gpt4 book ai didi

sql - 如果不存在则创建 UDF(用户定义函数),如果存在则跳过它

转载 作者:行者123 更新时间:2023-12-01 19:31:42 25 4
gpt4 key购买 nike

您好,感谢您阅读本文。

我正在尝试使用 IF EXISTS/IF NOT EXISTS 语句来检查对象是否存在。基本上我想跳过它(如果它存在)或创建它(如果它不存在)。

我用两种不同的方式编写代码,但出现错误:创建函数必须是批处理中的唯一函数。如果我将 GO 放置在语句之间,如下所示,我会收到另一个警告:GO 附近的语法不正确。

我哪里出错了?

IF NOT EXISTS
(select * from Information_schema.Routines where SPECIFIC_SCHEMA='dbo'
AND SPECIFIC_NAME = 'FMT_PHONE_NBR' AND Routine_Type='FUNCTION')

/*CREATE FUNCTION TO FORMAT PHONE NUMBERS*/
CREATE FUNCTION [dbo].[FMT_PHONE_NBR](@phoneNumber VARCHAR(12))
RETURNS VARCHAR(12)
AS
BEGIN
RETURN SUBSTRING(@phoneNumber, 1, 3) + '-' +
SUBSTRING(@phoneNumber, 4, 3) + '-' +
SUBSTRING(@phoneNumber, 7, 4)
END

GO

或者这个:

IF NOT EXISTS
(SELECT name FROM sys.objects WHERE name = 'dbo.FMT_PHONE_NBR')

GO

/*CREATE FUNCTION TO FORMAT PHONE NUMBERS*/
CREATE FUNCTION [dbo].[FMT_PHONE_NBR](@phoneNumber VARCHAR(12))
RETURNS VARCHAR(12)
AS
BEGIN
RETURN SUBSTRING(@phoneNumber, 1, 3) + '-' +
SUBSTRING(@phoneNumber, 4, 3) + '-' +
SUBSTRING(@phoneNumber, 7, 4)
END

GO

感谢您查看此内容!

最佳答案

解决这个问题的最简单方法实际上是删除该函数(如果它已经存在),然后重新创建它:

/* If we already exist, get rid of us, and fix our spelling */
IF OBJECT_ID('dbo.FMT_PHONE_NBR') IS NOT NULL
DROP FUNCTION FMT_PHONE_NBR
GO

/*CREATE FUNCTION TO FORMAT PHONE NUMBERS*/
CREATE FUNCTION [dbo].[FMT_PHONE_NBR](@phoneNumber VARCHAR(12))
RETURNS VARCHAR(12)
AS
BEGIN
RETURN SUBSTRING(@phoneNumber, 1, 3) + '-' +
SUBSTRING(@phoneNumber, 4, 3) + '-' +
SUBSTRING(@phoneNumber, 7, 4)
END

GO

注意上面“object_id”函数的用法。这实际上是检查对象是否存在的一种非常常见的方法,尽管它受到某些限制。

您可以在这里阅读更多相关信息:OBJECT_ID

关于sql - 如果不存在则创建 UDF(用户定义函数),如果存在则跳过它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8886759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com