Sql-Server

如果函式不存在,則在 SQL Server 中創建函式

  • December 20, 2016
   If not  Exists (Select * from sys.objects where name ='FNLX_getDate'  and type =N'FN')

   Create function [dbo].[FNLX_getDate]() returns Datetime
   as
   Begin
   .................
   End

當我執行上面的腳本時,我得到了錯誤

關鍵字“function”附近的語法不正確。

有什麼問題?

使用 Microsoft SQL Server 執行上述腳本。

如果您執行的是 SQL Server 2016 SP1+,則可以使用CREATE OR ALTER以避免有條件地預先刪除該函式:

CREATE OR ALTER FUNCTION [dbo].[FNLX_getDate]() returns Datetime
AS
BEGIN
...
END;

不幸的是,你不能那樣使用create function。它必須是批處理中的第一個語句。

您可以嘗試使用動態 SQL,例如:

If not Exists (Select * from sys.objects where name ='FNLX_getDate'  and type =N'FN')
   BEGIN
       DECLARE @sql NVARCHAR(MAX);
       SET @sql = N'CREATE FUNCTION ...';
       EXEC sp_executesql @sql;
   END

或者經典方式(就像您可以查看是否使用 SSMS 生成腳本):drop 並創建:

If Exists (Select * from sys.objects where name ='FNLX_getDate'  and type =N'FN')
   drop function [dbo].[FNLX_getDate]
GO
Create function [dbo].[FNLX_getDate]() returns Datetime
as
Begin
.................
End

注意GOSSMS 批處理分隔符。

引用自:https://dba.stackexchange.com/questions/158664