SQL Serverにトリガーの後にトリガーがあることがわかりました。また、挿入されたペスード・テーブルの値を変更することはできません。私のテーブルに挿入されるデータをチェックし、データが自分の制約に違反した場合、これらの値をデフォルト値に変更する必要があります。どうすればいいですか?挿入後に値を更新するのはどうですか?しかし、テーブルにユニークな主キーまたは列がない場合は、挿入した行を見つけて更新するにはどうすればよいですか?T-SQL挿入前の値を変更する方法
4
A
答えて
11
基本的には、INSTEAD OF INSERT
トリガーで、あなたが探しているものを達成することができます - ちょうどだからあなたのトリガが見える、INSERTED
擬似テーブルからデータを読み出し、それを変更し、テーブル
に挿入します
CREATE TRIGGER YourTrigger ON dbo.YourTable
INSTEAD OF INSERT
AS
SET NOCOUNT ON
-- do the INSERT based on the INSERTED pseudo table, modify data as needed
INSERT INTO dbo.YourTable(Col1, Col2, ....., ColN)
SELECT
Col1, 2 * Col2, ....., N * ColN
FROM
INSERTED
もちろん、次のように追加することもできます。例えば、SELECT .... FROM INSERTED
という文にWHERE
節の形式でチェックします。特定の行を無視する - 可能性は無限大です!
+0
ありがとうございました。それは実際に動作します。 :-) – tmj
関連する問題
- 1. TSQL:[挿入
- 2. TSQL - 一括挿入
「INSTEAD OF」トリガのポイントは、その操作(「INSERT」など)を「取得」して、通常の操作ではなく*何かを行うことができることです。そこで、値を読み込み、変更して、INSERTの中でINSERTを呼び出して、変更されたデータを挿入することができます。 –
この問題は、テーブル構造が変更された場合、トリガーも同様です。代わりにOracleでは、「挿入された」オブジェクト(「new」)と同等のものを更新することができます。これははるかに論理的です。 –