0

私は私が作ったこのトリガーを持っています

alter trigger fuzzylogic  on oehdrhst_sql

for insert
as
begin
declare @ordno char(8)
declare @rownum int
declare @id int

select @ordno = ord_no from inserted
select @rownum = a.id from banktransactions a  where convert(char(8),a.OwnReference) = (select ord_no from inserted)


select @id = a.id from banktransactions a join inserted i on i.ord_no = a.invoicenumber
where a.invoicenumber = @ordno
begin
    insert into triggertest values(@ordno,@rownum,@id)
    update banktransactions set matchid = @rownum,SupplierInvoiceNumber = @ordno where id = @id
end
end

行を挿入した後にトリガーテストの内部を見ると、ordno と rownum が表示されますが、id に null が表示され続けます

この sql ステートメントを実行して、クエリが何も返さないかどうかをテストしましたが、返されました。

select a.id from banktransactions a join oehdrhst_sql b on a.invoicenumber = b.ord_no

変数が印刷されないのはなぜですか?

4

1 に答える 1

1

挿入されたものから @ordno = ord_no を選択

この論理には根本的な欠陥があります。複数の行を挿入する場合、変数にはどのような値が割り当てられると予想されますか? 任意になります。トリガーは、行ごとではなく、ステートメントごとに起動します。

複数行の挿入を処理するには、トリガーを更新する必要があります。スキーマ、サンプル データ、および目的の結果がなければ、これは、から任意の行を割り当てるのではなく、使用する必要があるトリガー ロジックのあいまいな推測ですinserted

ALTER TRIGGER dbo.fuzzylogic -- always use dbo prefix!
ON dbo.oehdrhst_sql -- always use dbo prefix!
FOR INSERT
AS
BEGIN
  SET NOCOUNT ON;

  INSERT dbo.triggertest -- always use schema prefix!
    -- where is your column list?
    SELECT i.ord_no, b1.id, b2.id
    FROM inserted AS i
    INNER JOIN dbo.banktransactions AS b1 -- always use schema prefix!
    ON i.ord_no = CONVERT(CHAR(8), b1.OwnReference)
    INNER JOIN dbo.banktransactions AS b2 -- always use schema prefix!
    ON i.ord_no = b2.invoicenumber;

  UPDATE b
    SET matchid = b1.id, SupplierInvoiceNumber = i.ord_no
    FROM dbo.banktransactions AS b
    INNER JOIN dbo.banktransactions AS b2 -- always use schema prefix!
    ON b.id = b2.id
    INNER JOIN inserted AS i 
    ON i.ord_no = b2.invoicenumber
    INNER JOIN dbo.banktransactions AS b1 -- always use schema prefix!
    ON i.ord_no = CONVERT(CHAR(8), a.OwnReference);
END
GO

これは完全に間違っている可能性がありますが、これもまた、システムを詳しく調べないとわかりません (または、銀行取引テーブルの 3 つの異なる行が関連している必要があるのはなぜですか? なんと!)。それは少なくともあなたにスタートを与えるはずです。

于 2013-08-28T20:16:35.213 に答える