にO.F.、更新トリガーアペンドデータ二回コラム
は、だから私は、行が別のテーブルに更新されたときに基づいてテーブルを更新するトリガーを構築しようとしてきました。今のところトリガーはこのように見えます。
ALTER TRIGGER [dbo].[tst_update_USCATVLS_6]
ON [dbo].[IV00101]
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @ITEMNUMBER VARCHAR(75)
SET @ITEMNUMBER = (SELECT ITEMNMBR FROM dbo.IV00101 WHERE DEX_ROW_TS = (SELECT MAX(DEX_ROW_TS) FROM dbo.IV00101))
UPDATE dbo.EXT00101 SET STRGA255 = (RTRIM(LTRIM(STRGA255))) + '_0' WHERE PT_UD_KEY = @ITEMNUMBER AND PT_UD_Number = 2
以下のようなテストアップデートを実行するとどうなるでしょうか。
UPDATE PDM.TEST.dbo.IV00101
SET USCATVLS_6 = 'OBSOLETE'
WHERE ITEMNMBR = 'HMLGDN-7563252-4'
トリガーは起動しますが、目的の列を2回更新しますか?最終結果はこの20025947756319_0の代わりに20025947756319_0_0になります。
トリガーをドロップして同じテストアップデートを実行した後、トリガーされたすべてのステートメントで実行された更新ステートメントを実行すると、データが必要に応じて更新されます。だから、コードの1つのブロックとして、これを実行している
は動作します:
UPDATE PDM.TEST.dbo.IV00101
SET USCATVLS_6 = 'OBSOLETE'
WHERE ITEMNMBR = 'HMLGDN-7563252-4'
DECLARE @ITEMNUMBER VARCHAR(75)
SET @ITEMNUMBER = (SELECT ITEMNMBR FROM PDM.TEST.dbo.IV00101 WHERE DEX_ROW_TS = (SELECT MAX(DEX_ROW_TS) FROM PDM.TEST.dbo.IV00101))
UPDATE PDM.TEST.dbo.EXT00101 SET STRGA255 = (RTRIM(LTRIM(STRGA255))) + '_0' WHERE PT_UD_KEY = @ITEMNUMBER AND PT_UD_Number = 2
いずれかが、これは私はそれを大幅に感謝起こっている理由を私は把握することができます。
親切よろしく、 Z.
あなたのトリガーは二つの主要な欠陥があります。まず、1行しか更新されないと仮定しています。これは、SQL Serverでトリガーが動作する方法ではありません。 1回の操作ではなく、1回の操作で1回発射されます。 2番目の欠点は、挿入または削除された仮想テーブルを参照していないことです。つまり、テーブルの行を更新するたびに、テーブルのすべての行が更新されます。 –
@Sean Lange、挿入されたテーブルと削除されたテーブルの参照についてのアドバイスの後、別のトリガーを作成して2つの一時テーブルのデータを見ることができました。私が更新ステートメントを実行すると、挿入と削除テーブルに2回書いているようですが、私は4つの別々のデータセットを各テーブルに2つ戻します。それはユニークなアイテムの通常の出力ですか? – Zajac