Sql server 基于查询的列自动递增
我正在尝试一个真正的新手MS Access表单(链接到),后端有一个SQL Server 因此,我有一个简单的发票表Sql server 基于查询的列自动递增,sql-server,ms-access,vba,database-trigger,Sql Server,Ms Access,Vba,Database Trigger,我正在尝试一个真正的新手MS Access表单(链接到),后端有一个SQL Server 因此,我有一个简单的发票表 create table Invoice ( ID INT not null primary key, IssuerID int not null, InvoiceID int not null, CustomerID int not null ) 也许我甚至不需要ID,因为我可以通过成对(IssuerID、InvoiceID)唯一地标识条目 总
create table Invoice
(
ID INT not null primary key,
IssuerID int not null,
InvoiceID int not null,
CustomerID int not null
)
也许我甚至不需要ID,因为我可以通过成对(IssuerID、InvoiceID)唯一地标识条目
总而言之,我想将invoice byIssuerID
添加到一些CustomerID
中,InvoiceID
自然应该增加1。我可以做类似的事情
SELECT ISNULL(MAX(InvoiceID), 0) + 1 AS InvoiceID
FROM Invoice
WHERE IssuerID = @sp;
其中@sp
是某个值
在UI逻辑中,我有一个组合框来选择IssuerID
(访问),我的问题从这里开始
我使用了一个用于InvoiceID
的文本框。我希望它通过下一个ID更新表(即,如果IssuerID=5,有3张已开具发票,则下一张发票应编号为4)。
我无法使直接SQL工作,也无法在IssuerID
combo的更新后使用VBA
因此,我创建了一个视图(在SQL Server中并链接到它),其中包含所有可能的IssuerID及其相应的NextInVoiceID
SELECT
IssuerID, NextInvoiceID
FROM
(SELECT
Issuers.ID AS IssuerID,
ISNULL(MAX(Invoice.InvoiceID), 0) + 1 AS NextInvoiceID
FROM
Issuers
FULL OUTER JOIN
Invoice ON Issuers.ID = Invoice.IssuerID
GROUP BY
Issuers.ID) AS UNDATA
接下来,我可以选择nextInvoiceID
,但现在我需要它来更新实际列
可以从同一个文本框中进行吗
我是否应该回退,使用一些触发器更新此(InvoiceID)(或者SQL Server中是否有其他可用的自动增量选项)?Eh。。。我不确定你到底在问什么。也许您只是在寻找使字段自动递增的标识规范(
ID INT not null identity(1,1)主键,
)?或者有什么原因不能这样做吗?InvoiceID仅在IssuerID之前是唯一的,即IssuerID 5发出了3张发票,而IssuerID 6已经是1097,那么IssuerID 5的下一个InvoiceID应该是4而不是1098!因此,它不是主键。在这种情况下,您可以尝试在SQL server中使用insert而不是insert触发器。提供在实际插入插入行之前修改插入行的概述。关于如何构建这样一个触发器的完整演练在这里太广泛了。为什么不使用IssuerID和InvoiceID作为复合主键呢?引入另一个复合主键没有多大意义。