Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tôi có thể tạo chức năng toàn cục trong SQL Server không?

Bạn có thể tạo hàm trong cơ sở dữ liệu chính (hoặc một số cơ sở dữ liệu cố định khác), rồi tạo một từ đồng nghĩa trong cơ sở dữ liệu mô hình:

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

Điều này sẽ tạo ra một từ đồng nghĩa với hàm trong bất kỳ mới nào cơ sở dữ liệu, nhưng đối với cơ sở dữ liệu hiện có (hoặc cơ sở dữ liệu được đính kèm hoặc khôi phục trong tương lai), bạn sẽ cần sao chép từ đồng nghĩa vào đó. Điều này sẽ cho phép bạn tham chiếu đối tượng với tên gồm hai phần trong bất kỳ cơ sở dữ liệu nào, trong khi chỉ phải lưu trữ một bản sao của mã.

Ngoài ra, mã của bạn có thể ngắn gọn hơn nhiều:

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

Vì vậy, từ đầu:

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

Bây giờ để tạo một từ đồng nghĩa cho điều này trong mỗi cơ sở dữ liệu:

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. Cách tạo chuỗi trong SQL Server 2008

  2. HOẶC không được hỗ trợ với Câu lệnh CASE trong SQL Server

  3. Di chuyển cơ sở dữ liệu hệ thống trong cụm chuyển đổi dự phòng máy chủ SQL

  4. Cách xóa một ký tự cụ thể khỏi chuỗi, chỉ khi nó là ký tự đầu tiên hoặc cuối cùng trong chuỗi.

  5. Số ngày trong tuần trong một phạm vi ngày trong TSQL