SQL Serverでトリガーするのはかなり新しいので、誰かが助けてくれ、少なくとも私を正しい方向に向けることを望んでいます。テーブルに挿入する前にデータを検証するSQL Serverトリガー
私は、挿入前にこれらのレコードを検証したいジョブに関連して複数のレコードが挿入されているテーブルを持っており、要件を満たさない場合はraiseerrorを実行します。
私はすべてがiJCMasterID
によってグループ化され、私は基本的に
CustCharge = Jobtotal
がだけ含まれているジョブのことを確認する必要があり、それが簡単に私が
SELECT TOP (100) PERCENT
iJCMasterID,
SUM(CASE WHEN ubJCTxSTNoProint = 1
THEN fTransQty * ufJCTxSTCustomerCharge
ELSE 0
END) AS CustCharge,
SUM(CASE WHEN iStockID = 5774 THEN 1 ELSE 0 END) AS ValidateJoblot,
SUM(CASE WHEN iStockID = 5774 THEN fUnitPriceExcl * fTransQty ELSE 0 END) AS JobTotal
FROM
dbo._btblJCTxLines
GROUP BY
iJCMasterID, dStartDate
HAVING
(SUM(CASE WHEN iStockID = 5774 THEN 1 ELSE 0 END) > 0)
を行うにしようとしていますかを説明するために作成しようとするビューを作成している
Having
句が戦場に出ている仕事の多く
あなたが助けるために必要となるその他の情報があれば、私はのために
と感謝を教えてくださいあなたの事前に助け
これは私がこれまで試してみましたものですが、あなたはINSTEAD OF UPDATE,INSERT
トリガーを使用することができますトリガと検証を行いたい場合は
USE [*******DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[ValidateCC] ON [dbo].[_btblJCTxlines] for insert, update AS
begin
if exists(select COUNT(*) from inserted)--drop TRIGGER [dbo].[JobOverCreditLimit]
declare @Jobamount float
SET @Jobamount = (select sum(fLineTotalExcl) as JobAmount from inserted
where iStockID = 5774
GROUP BY inserted.iJCMasterID)
declare @CCAmount float
SET @CCAmount = (select sum(fTransQty * ufJCTxSTCustomerCharge) as JobAmount from inserted
where ubJCTxSTNoProint = 1
GROUP BY inserted.iJCMasterID)
declare @Validation float
set @Validation = (@Jobamount - @CCAmount)
IF @Validation <> 0
BEGIN
DECLARE @EMSG VARCHAR(500)
SET @EMSG = 'Customer Charge R' + CAST(@CCAmount AS VARCHAR(20))+' does not equal Job Amount R'+ CAST(@CCAmount AS VARCHAR(20))+ ''
BEGIN
rollback tran
RAISERROR (@EMSG ,16, 1)
end
END
end
なぜその値を保存するのですか?なぜあなたはそれを必要時に計算しないのですか? –
こんにちはGordon元の投稿を編集しましたが、実際には別のテーブルに値を保存する必要はありません。挿入する前に検証するか、エラーを発生させて参照用のポストにトリガーを挿入しましたが、動作している –