Du kan oprette funktionen i master (eller en anden permanent database), og derefter oprette et synonym i modeldatabasen:
USE model;
GO
CREATE SYNONYM dbo.getDays FOR master.dbo.getDays;
Dette vil skabe et synonym til funktionen i enhver ny databaser, men for eksisterende databaser (eller databaser vedhæftet eller gendannet i fremtiden) skal du kopiere synonymet dertil. Dette vil tillade dig at referere til objektet med et todelt navn i enhver database, mens du kun skal gemme én kopi af koden.
Som en side kan din kode være meget mere kortfattet:
RETURN (SELECT DATEPART(DAY, DATEADD(DAY, -1,
DATEADD(MONTH, 1, DATEADD(DAY, 1-DAY(@date), @date)))));
Så fra toppen:
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
Nu for at oprette et synonym for dette i hver database:
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;