我有以下问题...
我有一个表AccountingEntry
,它目前有一个主键,即会计ID
。我还有一个专栏,告诉我它是哪种类型的入口......
我需要做的是以下......
如果行是某种类型(比如说CreditCardPayment
),我需要增加另一列的值,让我们说CCId
一个......我怎样才能实现这个? / p>
(只是抬头,不能分隔表格)
这需要在INSERT语句中完成....
让我们在我的数据库中说我有......
ID | TYPE |另一个身份证
1 | DEBIT | -
2 |信用| 1
3 | DEBIT | -
4 |信用| x - >这需要是最后一个信用'AnotherID'+ 1
答案 0 :(得分:4)
具有UPDATE
条件的简单WHERE
应该在这里完成工作:
UPDATE TableName SET CCId = CCId + 1 WHERE Type = 'CreditCardPayment'
更新
您可以在INSERT
语句后使用trigger:
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
答案 1 :(得分:0)
如果您要运行一次性实例,可以使用Row_Number()函数。
select rowtype, accountingid, ROW_NUMBER() over(partition by rowtype order by rowtype, accountingid)
这将为accountingid订购的每种行类型提供唯一的行号。然后,如果您需要在数据库中使用此信息,则可以使用select运行更新,或者将所选行放在临时表中并以此方式更新。
答案 2 :(得分: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