0

私の理解では、ベース テーブルに UDF に基づく計算列があるテンポラル テーブルを設定することはできません。ただし、特定のプロセスに従えばこれが可能であることが示唆されているのを見てきました: Azure SQL Server 2016 テンポラル テーブルの計算列

推奨される手順は次のとおりです。

  • 最初にシステムのバージョン管理を無効にする
  • 次に、計算列をベース テーブルに追加します。
  • 結果の計算列の「タイプ」を確認します
  • 適切な静的タイプの列を履歴テーブルに追加します
  • システムのバージョン管理を有効に戻す

このソリューションは Azure でのみ機能する可能性があります。タイプdatetimeのUDF計算列を持つテーブルを使用してSQL標準で試しましたが、成功しませんでした。誰かがこれを機能させることができましたか?もしそうなら、簡単なTSQLの例を共有してください.

TNX

4

1 に答える 1

0

実行可能ですが、UDF はスキーマバインディングでなければなりません。

例があります:

CREATE FUNCTION [dbo].[VitalyUTCtoDate] (@UTCDate DATETIME2)
RETURNS DATETIME2 WITH SCHEMABINDING AS  
BEGIN 
    RETURN CASE WHEN @UTCDate < '9999-01-01' THEN DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), @UTCDate) ELSE NULL END;
END
GO

CREATE TABLE [dbo].[VitalyTest](
     [ID] [bigint] IDENTITY(1,1) NOT NULL 
    ,[Name] NVARCHAR(255) NOT NULL
    ,[Value] INT NULL
    ,[ValidFrom] DATETIME2 (2) GENERATED ALWAYS AS ROW START HIDDEN 
    ,[ValidTo] DATETIME2 (2) GENERATED ALWAYS AS ROW END HIDDEN

    ,[WhenCreated] AS dbo.VitalyUTCtoDate(ValidFrom)

    ,CONSTRAINT [PK_VitalyTest] PRIMARY KEY CLUSTERED ([ID] ASC)
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ,PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[VitalyTestHistory]))
GO
于 2018-03-15T02:07:54.887 に答える