如果不存在则创建函数并更改函数(如果函数已存在)

时间:2016-02-09 16:03:17

标签: 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'

GO

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

但是,上面的脚本给我一个错误Incorrect syntax near the keyword 'AS'.

1 个答案:

答案 0 :(得分:2)

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

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