अद्यतन जनवरी 2017 - SQL सर्वर 2016+ / Azure SQL डेटाबेस
SQL सर्वर 2016 और Azure SQL डेटाबेस के वर्तमान संस्करण में अब फ़ंक्शन, प्रक्रिया, टेबल, डेटाबेस, आदि के लिए निम्नलिखित सिंटैक्स है DROP IF EXISTS
: ( ):
DROP FUNCTION IF EXISTS dbo.fn_myfunc;
और SQL सर्वर 2016 सर्विस पैक 1 मॉड्यूल (फ़ंक्शन, प्रक्रिया, ट्रिगर, विचार) के लिए और भी बेहतर कार्यक्षमता जोड़ता है जिसका अर्थ है अनुमतियों या निर्भरताओं का कोई नुकसान नहीं ( CREATE OR ALTER
):
CREATE OR ALTER FUNCTION dbo.fn_myfunc ...
इन दोनों सिंटैक्स एन्हांसमेंट से स्रोत नियंत्रण, परिनियोजन, आदि के लिए उपयोग की जाने वाली बहुत सरल स्क्रिप्ट हो सकती हैं।
लेकिन, यदि आप उपयोग कर रहे हैं ...
पुराने संस्करण
जब आपको प्रबंधन स्टूडियो से यह स्क्रिप्ट आती है तो आपको SQL सर्वर क्या करता है:
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 से जारी रहेगी, इसलिए ड्रॉप काम किया या नहीं, फ़ंक्शन अभी भी बनाया जाएगा (पुनः)।)
ध्यान दें कि यदि आप फ़ंक्शन को छोड़ते हैं और इसे फिर से बनाते हैं, तो आप अनुमतियाँ और संभावित निर्भरता जानकारी भी खो देंगे।