1

我有以下问题...

我有一个表AccountingEntry,它当前有一个主键,即accounting ID。我还有一列告诉我它是哪种类型的条目...

我需要做的是以下...

如果该行是某种类型(假设CreditCardPayment,我需要增加另一列的值,假设CCId增加一个......我该如何完成这个??

(只是提醒,不能做表格分离)

这需要在 INSERT 语句中完成......

可以说在我的数据库中我有..

身份证 | 类型 | 另一个 ID
1 | 借方 | -
2 | 信用 | 1
3 | 借方 | -
4 | 信用 | x -> 这需要是最后一个信用 'AnotherID' + 1

4

3 回答 3

4

简单UPDATEWHERE条件应该在这里完成工作:

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

这是由此产生的触发器......非常适合我需要的东西。在运行脚本以更改我目前为止在我的数据库中的数据后,每次插入记录时,如果它是我需要的类型,它将自动增加字段 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 回答
0

如果您希望运行一次性实例,可以使用 Row_Number() 函数。

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

这将为您提供按 accountingid 排序的每个行类型的唯一行号。然后,如果您需要数据库中的此信息,您可以使用 select 运行更新或将选定的行放在临时表中并以这种方式更新。

于 2013-03-19T13:20:41.190 回答