sql - 如果函数不存在则创建一个函数,如果函数已经存在则更改函数

标签 sql user-defined-functions sql-server-2014 dynamic-sql

我正在创建一个标量值函数,但在创建它之前,我想检查它是否存在,如果不存在,则使用动态脚本创建该函数,然后正常更改它。我在存储过程中使用了它,但我无法对函数执行同样的操作。

我的程序如下

IF  NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[region]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
BEGIN
    EXEC dbo.sp_executesql @statement =  N' CREATE PROCEDURE [dbo].[region] AS BEGIN Print ''A'' END'
END
GO

ALTER PROCEDURE  [dbo].[region](---)
AS
---
END

我尝试对标量值函数采用相同的方法,如下所示

IF  NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[region]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
BEGIN
    EXEC dbo.sp_executesql @statement = N' CREATE FUNCTION [dbo].[region]  AS RETURN 0'

开始

ALTER FUNCTION dbo.region(@dd datetime)
--
GO

但是,上面的脚本向我抛出了一个错误 Incorrect syntax near the keyword 'AS'。

最佳答案

您需要指定参数(即使没有)和函数的返回类型

EXEC dbo.sp_executesql @statement = N' CREATE FUNCTION [dbo].[region]() RETURNS VARCHAR AS  BEGIN RETURN ''A'' END'

关于sql - 如果函数不存在则创建一个函数,如果函数已经存在则更改函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35296583/

相关文章:

SQL 约束名称

java - 如何将用户定义的对象添加到 LinkedList?

sql-server-2014 - 货币数据类型 (Microsoft SQL Server 2014)

sql-server-2008-r2 - 如何链接不同AD域的服务器?

SQL函数: Modify String and Return in MSSQL Server 2014

sql - 具有许多相同 ID 的 Django ManyToManyField

php - MySQL 存储过程和准备语句的性能比较

sql - 在 laravel [实现过滤器] 中通过 Eloquent 和急切的加载将多个表连接在一起

vba - 允许在一个打开的工作簿中使用 UDF,但使其在另一工作簿中不可见/不可用/不可访问

python - 转换 Python Lambda 函数而不将值返回给 Pyspark