Sql 如果没有',则创建函数;t exist,如果函数已经存在,则对其进行更改

Sql 如果没有',则创建函数;t exist,如果函数已经存在,则对其进行更改,sql,user-defined-functions,sql-server-2014,dynamic-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 @st

我正在创建一个标量值函数,但在创建它之前,我想检查它是否存在,如果不存在,则使用动态脚本创建函数,然后正常修改它。我让它在存储过程中工作,但在函数中却做不到

我的程序如下

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'
我尝试对标量值函数采用如下相同的方法

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'

但是,上面的脚本在关键字“AS”附近抛出了一个错误
错误语法。

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

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

很抱歉,我已经编辑了我的问题,我列出的错误是实际错误。您在创建函数语句中有两次将
作为
这个词。如果函数存在,您只需删除它并创建afterwards@Aツ 删除函数会导致安全问题,因为我必须手动向不同的用户授予权限,一旦删除函数,这些用户的权限就会消失