0

私はこの種のデータ挿入方法を持っています

private void InsertReceipt()
    {   
        decimal Stub;
        Stub = Math.Floor(decimal.Parse(txtAmount.Text) / 2000);

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "INSERT INTO Ticket(CustomerID, Date, Store, Amount, NoStub)" +
                    "VALUES (@CustomerID, @Date, @Store, @Amount, @NoStub) ";
        cmd.Parameters.AddWithValue("@CustomerID", txtCustomerID.Text);
            cmd.Parameters.AddWithValue("@Date", dtpDate.Value.Date.ToString());
        cmd.Parameters.AddWithValue("@Store", txtStore.Text);
        decimal amount = decimal.Parse(txtAmount.Text);
        cmd.Parameters.AddWithValue("@Amount", amount);
        cmd.Parameters.Add("@NoStub", SqlDbType.Decimal).Value = Stub;

        cmd.ExecuteNonQuery();            
    }

テーブル「Ticket」にデータを挿入すると、別のテーブルが更新されるメソッドが必要です。

    CustomerID      Date        Store      Amount      NoStub
         1        6/7/2013      Nike       4000          2
         2        6/7/2013      Adidas     6000          3

このテーブルは更新されます。たとえば、「StubRange」という名前のテーブルを使用します。この出力は生成されます。

 RangeID         CustomerID      NoStub       TickerStart      TickerEnd
   1                1              2           00001           00002
   2                2              3           00003           00005

この種の方法を持つ方法を学びたいだけです。

4

3 に答える 3

1

あなたが探しているのはAfter Insert トリガーです。
基本的に、挿入が行われた後にトリガーされるイベントと考えることができます(したがって、トリガー...)。

トリガーは次のようになります。

CREATE TRIGGER YourTriggerName --The name of your trigger
ON Ticket --The table it will be observing
 AFTER INSERT,UPDATE --It will trigger after insert / update
AS
--The actions you want to do. For example:
DECLARE @CustomerId int

SET @CustomerId = (SELECT CustomerId FROM inserted) --you might want to use 'inserted' table

--Inset values
Insert into StubRange (CustomerID , NoStub) 
Select Distinct ins.CustomerID, ins.NoStub 
From Inserted ins

--Update existing records
UPDATE StubRange
set --Set what ever it is you want to update
WHERE CustomerId = @CustomerId 

挿入されたテーブルの詳細 - Microsoftによると:

挿入されたテーブルには、INSERT および UPDATE ステートメント中に影響を受ける行のコピーが格納されます。挿入または更新トランザクション中に、挿入されたテーブルとトリガー テーブルの両方に新しい行が追加されます。挿入されたテーブルの行は、トリガー テーブルの新しい行のコピーです。

于 2013-08-06T03:36:28.790 に答える
0

チケットテーブルにレコードを挿入するたびに、挿入トリガーを記述する必要があります。以下の構文を参照して、トリガーを作成できます。これはオラクルの構文です

CREATE OR REPLACE TRIGGER TRIGGER_INSERT_STUBRANGE 
AFTER INSERT ON TICKET
FOR EACH ROW
DECLARE
    raise_exception                Exception;
BEGIN

        --WRITE YOUR INSERT STATEMENT HERE

Exception
         when raise_exception then
         RAISE_APPLICATION_ERROR(-20001, sqlerrm );
END;
于 2013-08-06T03:29:22.310 に答える
0

これにより、 table1 の更新時に table1 に挿入トリガーが作成され、 table2 は CustomerID、テーブル 1 の NoStub で更新され、残りのプロパティはビジネス ロジックに依存します。

CREATE TRIGGER trig_Update_table
ON [tableName1]
FOR INSERT
AS
Begin
    Insert into tableName2 (CustomerID , NoStub) 
    Select Distinct i.CustomerID, i.NoStub 
    from Inserted i
End
于 2013-08-06T03:34:36.657 に答える