web-dev-qa-db-ja.com

挿入時に新しいレコードの列をCUR​​RENT_TIMESTAMPに更新するトリガー

では、レコードが最初に挿入されたときに、特定のレコードのCURRENT_TIMESTAMPに列を更新しようとしています。これは私が持っているものですが、それ以外の場合は迷っています。

CREATE TRIGGER dbo.TrgUpnInsert
  ON [CNLH Security Authentication].dbo.DateTimestamp
    AFTER INSERT, 
    INSERT INTO [CNLH Security Authentication].dbo.EntranceInformation (DateTimestamp) Values (CURRENT_TIMESTAMP);
2
AArmentrout

次の例のように、トリガーは ' virtual Inserted 'テーブルを活用する必要があります。

CREATE TRIGGER ModDate
    ON TableX
    AFTER INSERT
AS
BEGIN
    UPDATE X 
    SET ModifiedDate = CURRENT_TIMESTAMP
    FROM TableX X
    JOIN inserted i ON X.key = i.key -- change to whatever key identifies 
                                     -- the tuples
END 

トリガーの代わりとして、なぜその列にデフォルト値を割り当てるだけではないのでしょうか。例:

ALTER TABLE myTable 
  ADD CONSTRAINT CONSTRAINT_NAME
    DEFAULT CURRENT_TIMESTAMP FOR myColumn

例:

IF OBJECT_ID('tempdb..#temp') IS NOT NULL
    DROP TABLE #temp

CREATE TABLE #temp (
    col1 VARCHAR(10)
    ,col2 DATETIME
    )

ALTER TABLE #temp ADD CONSTRAINT ConstraintForTemp DEFAULT CURRENT_TIMESTAMP
FOR col2

INSERT INTO #temp (col1)
VALUES ('abc')

SELECT *
FROM #temp
6
Scott Hodgin