1

私は次の問題を抱えています...

AccountingEntry現在、アカウンティングである主キーを持つテーブルがありIDます。また、どのタイプのエントリであるかを示す列もあります...

私がする必要があるのは次のとおりです...

行が特定のタイプである場合(たとえばCreditCardPayment、別の列の値をインクリメントする必要があります。たとえばCCId、1つずつ...これを実現するにはどうすればよいですか?)

(注意してください。テーブルの分離はできません)

これは、INSERTステートメントで実行する必要があります。

私のデータベースで私が持っているとしましょう。

ID | タイプ| 別のID1
| デビット| --2
| クレジット| 1
3 | デビット|
-4 | クレジット| x->これは最後のクレジットである必要があります'AnotherID'+ 1

4

3 に答える 3

4

Simple UPDATEwith WHEREconditionは、ここで作業を行う必要があります。

UPDATE TableName SET CCId = CCId + 1 WHERE Type = 'CreditCardPayment'

アップデート

INSERTトリガーを使用して、ステートメントの後に自動的に実行できます。

CREATE TRIGGER autoIncrement
ON TableName
AFTER INSERT
AS
    UPDATE
        TableName
    SET
        CCId = -- put your 'get last of that type + 1 here
    WHERE
        Type = 'CreditCardPayment' AND Id = inserted.Id
GO

-- put your 'get last of that type + 1 here次のようなものにすることができます:

SELECT TOP(1) AnotherID FROM TableName WHERE Type = 'CreditCardPayment' ORDER BY AnotherID DESC
于 2013-03-19T13:06:16.963 に答える
0

1回限りのインスタンスを実行する場合は、Row_Number()関数を使用できます。

select rowtype, accountingid, ROW_NUMBER() over(partition by rowtype order by rowtype, accountingid)

これにより、accountingidで並べ替えられた各行タイプの一意の行番号が取得されます。次に、データベースでこの情報が必要な場合は、selectを使用して更新を実行するか、選択した行を一時テーブルに配置して、その方法で更新できます。

于 2013-03-19T13:20:41.190 に答える
0

これが結果のトリガーです...私が必要としていたものに最適です。これまで持っていたデータベースのデータを変更するスクリプトを実行した後、レコードが挿入されるたびに、必要なタイプのレコードである場合は、フィールドInvoiceNumberが自動インクリメントされます。

CREATE TRIGGER IncrementInvoiceNumber 
       ON  AccountingEntry
       AFTER INSERT
    AS 
    BEGIN
        DECLARE @insertedId INT;
        SELECT TOP(1) @insertedId = IdAccountingEntry FROM AccountingEntry ORDER BY IdAccountingEntry DESC;
        UPDATE AccountingEntry SET InvoiceNumber = ( SELECT TOP(1) InvoiceNumber FROM AccountingEntry
                                                     WHERE AccountEntryType = 'I'
                                                     ORDER BY InvoiceNumber DESC    
                                                    ) + 1
                               WHERE IdAccountingEntry = @insertedId;

    END
于 2013-03-20T11:42:20.683 に答える