ปรับปรุง ม.ค. 2017 - SQL Server 2016+ / Azure SQL ฐานข้อมูล
SQL Server 2016 และ Azure SQL Database เวอร์ชันปัจจุบันมีไวยากรณ์ต่อไปนี้สำหรับฟังก์ชั่นขั้นตอนตารางฐานข้อมูลและอื่น ๆ ( DROP IF EXISTS
):
DROP FUNCTION IF EXISTS dbo.fn_myfunc;
และ SQL Server 2016 Service Pack 1 จะเพิ่มฟังก์ชันการทำงานที่ดียิ่งขึ้นสำหรับโมดูล (ฟังก์ชั่นขั้นตอนทริกเกอร์มุมมอง) ซึ่งหมายความว่าไม่สูญเสียสิทธิ์หรือการพึ่งพา ( CREATE OR ALTER
):
CREATE OR ALTER FUNCTION dbo.fn_myfunc ...
การปรับปรุงไวยากรณ์ทั้งสองนี้สามารถนำไปสู่สคริปต์ที่เรียบง่ายกว่ามากที่ใช้สำหรับการควบคุมซอร์สการปรับใช้ ฯลฯ
แต่ถ้าคุณใช้ ...
รุ่นเก่ากว่า
คุณต้องทำสิ่งที่ SQL Server ทำเมื่อคุณสคริปต์จาก Management Studio:
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE type = 'FN' AND name = 'fn_myfunc')
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'CREATE FUNCTION ...';
EXEC sp_executesql @sql;
END
หรือคุณสามารถพูดว่า:
BEGIN TRY
DROP FUNCTION dbo.fn_myfunc;
END TRY
BEGIN CATCH
PRINT 'Function did not exist.';
END CATCH
GO
CREATE FUNCTION...
หรือคุณสามารถพูดได้ว่า:
DROP FUNCTION dbo.fn_myfunc;
GO
CREATE FUNCTION...
(ที่นี่คุณจะได้รับข้อความแสดงข้อผิดพลาดหากฟังก์ชั่นยังไม่มีอยู่ แต่สคริปต์จะดำเนินการต่อจาก GO ถัดไปดังนั้นไม่ว่าการปล่อยจะทำงานหรือไม่ก็ตามฟังก์ชันจะยังคงถูกสร้างขึ้นใหม่)
โปรดทราบว่าหากคุณวางฟังก์ชั่นและสร้างใหม่คุณจะสูญเสียสิทธิ์และข้อมูลการพึ่งพาที่อาจเกิดขึ้นเช่นกัน