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

Sql Server 決定論的ユーザー定義関数

    with schemabinding作成するだけです .

    次に、SQL Server は、決定論的と見なされる基準を満たしているかどうかを確認します (外部テーブルにアクセスしたり、getdate() などの非決定論的関数を使用したりしないため、これを行います)。 ).

    で動作したことを確認できます
    SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].[FullNameLastFirst]'), 'IsDeterministic')
      

    元のコードに schemabinding オプションを追加しても問題なく動作しますが、もう少し単純なバージョンでも問題ありません。

    CREATE FUNCTION [dbo].[FullNameLastFirst] (@IsPerson  BIT,
                                               @LastName  NVARCHAR(100),
                                               @FirstName NVARCHAR(100))
    RETURNS NVARCHAR(201)
    WITH SCHEMABINDING
    AS
      BEGIN
          RETURN CASE
                   WHEN @IsPerson = 0
                         OR @FirstName = '' THEN @LastName
                   ELSE @LastName + ' ' + @FirstName
                 END
      END
      

    1. 値のリストに対する部分文字列のクエリ

    2. PHPMySqlとジオロケーション

    3. pl/sqlでの例外処理

    4. 外部キー制約エラーが発生したときにMySQLで無効な値をキャッチすることは可能ですか?