sql >> データベース >  >> RDS >> Sqlserver

SQL Server でグローバル関数を作成できますか?

    マスター (またはその他の永続的なデータベース) で関数を作成してから、モデル データベースでシノニムを作成できます。

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

    これにより、任意の new で関数の同義語が作成されます ただし、既存のデータベース (または将来接続または復元されるデータベース) の場合は、そこにシノニムをコピーする必要があります。これにより、コードの 1 つのコピーを保存するだけで、任意のデータベースで 2 つの部分からなる名前でオブジェクトを参照できます。

    余談ですが、コードはもっと簡潔にできます:

      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;
      

    1. Oracleでネストされたトランザクションを使用する

    2. Django-MySQLデータベースに行を追加します

    3. 特定の値がSQLServer(T-SQL)でマップされるパーティションを見つける

    4. 最高のIDを返す関数を作成するにはどうすればよいですか?