您可以創建在主函數(或其他永久性的數據庫),然後創建模型數據庫的代名詞:
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)))));
從頂部
所以:
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;
:
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
我們在每個數據庫中創建一個同義詞爲這個
「getDays」不是公認的內置函數名稱。 –
您需要在master中創建函數,然後在現有數據庫(不僅僅是模型)中創建同義詞。在模型中創建它只會在模型中創建同義詞後創建的* new *數據庫中創建函數。並且始終應始終使用模式前綴引用函數或同義詞,因此它應該是'dbo.getDays',而不是'getDays'。 –
我沒有低估這些「返回」的工作方式 –