आप मास्टर (या कुछ अन्य स्थायी डेटाबेस) में फ़ंक्शन बना सकते हैं, और फिर मॉडल डेटाबेस में एक समानार्थी शब्द बना सकते हैं:
USE model;
GO
CREATE SYNONYM dbo.getDays FOR master.dbo.getDays;
यह किसी भी नए . में फ़ंक्शन के लिए एक समानार्थी बना देगा डेटाबेस, लेकिन मौजूदा डेटाबेस (या भविष्य में संलग्न या पुनर्स्थापित किए गए डेटाबेस) के लिए आपको समानार्थी शब्द की प्रतिलिपि बनाने की आवश्यकता होगी। यह आपको किसी भी डेटाबेस में ऑब्जेक्ट को दो-भाग के नाम से संदर्भित करने की अनुमति देगा, जबकि कोड की केवल एक प्रति संग्रहीत करने की आवश्यकता होगी।
एक तरफ, आपका कोड अधिक संक्षिप्त हो सकता है:
RETURN (SELECT DATEPART(DAY, DATEADD(DAY, -1,
DATEADD(MONTH, 1, DATEADD(DAY, 1-DAY(@date), @date)))));
तो ऊपर से:
USE [master];
GO
DROP FUNCTION dbo.getDays;
GO
CREATE FUNCTION dbo.getDays
(
@date DATE
)
RETURNS INT
AS
BEGIN
RETURN (SELECT DATEPART(DAY, DATEADD(DAY, -1,
DATEADD(MONTH, 1, DATEADD(DAY, 1-DAY(@date), @date)))));
END
GO
अब प्रत्येक डेटाबेस में इसके लिए समानार्थी शब्द बनाने के लिए:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += CHAR(13) + CHAR(10)
+ 'USE ' + QUOTENAME(name) + ';
IF OBJECT_ID(''dbo.getDays'', ''FN'') IS NOT NULL
DROP FUNCTION dbo.getDays;
IF OBJECT_ID(''dbo.getDays'', ''SN'') IS NOT NULL
DROP SYNONYM dbo.getDays
CREATE SYNONYM dbo.getDays FOR master.dbo.getDays;'
FROM sys.databases WHERE name <> 'master';
PRINT @sql;
EXEC sp_executesql @sql;