2017-11-05 25 views
0

私はいくつかの列を持つテーブルを持っており、1つまたは複数の列の値をとり、別の列の値を設定するトリガーを作成したいと考えています。例えば挿入前のSQL Serverトリガー

:列TEST1、TEST2、TEST3と

テーブル試験。

私はtest2とtest3から値を取得し、それらをtest1に設定します。 その理由は、test1はnullでないと定義し、値はtest2 + test3でなければなりません。

挿入前にこれを行うことはできますか?あなたは以下のように計算列を追加することができます

+1

INSERT'がトリガーする前に、SQL Serverは '持っていません - 唯一のオプション(場合をあなたは本当にトリガーを使用しなければなりません)は、INSERTの代わりにトリガー –

答えて

2

、トリガーの必要

create table t1 
(
t1 as t2+t3, 
t2 int, 
t3 int 
) 
+0

t1がnullでない場合、上記のクエリは動作しますか?私はt1の値がnullでなければ保持する必要があり、そのnullの場合はt2とt3から計算する必要があると思います – Dheerendra

+0

t2とt3がnullではないと言うのを忘れてしまった – tal

0

はこれを試してみてくださいません:

IF OBJECT_ID('[dbo].[Demo]') IS NOT NULL 
BEGIN 
    DROP TABLE [dbo].[Demo]; 
END; 

CREATE TABLE [dbo].[Demo] 
(
    [test1] INT NOT NULL 
    ,[test2] INT 
    ,[test3] INT 
); 

GO 

/* 
Msg 515, Level 16, State 2, Line 15 
Cannot insert the value NULL into column 'test1', table 'TEST.dbo.Demo'; column does not allow nulls. INSERT fails. 
*/ 

INSERT INTO [dbo].[Demo] ([test2], [test3]) 
VALUES (1, 1); 

GO 

CREATE TRIGGER TRG_DEMO_I_I ON [dbo].[Demo] INSTEAD OF INSERT AS 
BEGIN 

    INSERT INTO [dbo].[Demo] ([test1], [test2], [test3]) 
    SELECT [test2] + [test3], [test2], [test3] 
    FROM inserted; 
END; 

GO 

-- this is OK 
INSERT INTO [dbo].[Demo] ([test2], [test3]) 
VALUES (1, 1); 

SELECT * 
FROM [dbo].[Demo]; 

GO 
関連する問題