Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bisakah saya membuat fungsi global di SQL Server?

Anda dapat membuat fungsi di master (atau database permanen lainnya), dan kemudian membuat sinonim dalam database model:

USE model;
GO
CREATE SYNONYM dbo.getDays FOR master.dbo.getDays;

Ini akan membuat sinonim untuk fungsi di baru any apa pun database, tetapi untuk database yang ada (atau database yang dilampirkan atau dipulihkan di masa mendatang), Anda harus menyalin sinonim di sana. Ini akan memungkinkan Anda untuk mereferensikan objek dengan nama dua bagian dalam database apa pun, sementara hanya harus menyimpan satu salinan kode.

Selain itu, kode Anda bisa lebih ringkas:

  RETURN (SELECT DATEPART(DAY, DATEADD(DAY, -1, 
     DATEADD(MONTH, 1, DATEADD(DAY, 1-DAY(@date), @date)))));

Jadi dari atas:

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

Sekarang untuk membuat sinonim untuk ini di setiap 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konfigurasikan Pengiriman Log SQL Server

  2. Memilih data dari dua server berbeda di SQL Server

  3. Pemindaian Mundur Indeks SQL Server:Memahami, Menyetel

  4. Mengapa UDF jauh lebih lambat daripada subquery?

  5. sql varchar (maks) vs varchar (memperbaiki)