如何自动增加非主键? - SQL Server

use*_*509 13 sql t-sql database sql-server normalization

CREATE TABLE SupplierQuote
(
supplierQuoteID int identity (3504,2) CONSTRAINT supquoteid_pk PRIMARY KEY,
PONumber int identity (9553,20) NOT NULL
.
.
.
CONSTRAINT ponumber_uq UNIQUE(PONumber)
);
Run Code Online (Sandbox Code Playgroud)

上面的ddl产生错误:

Msg 2744,Level 16,State 2,Line 1为表'SupplierQuote'指定的多个标识列.每个表只允许一个标识列.

我怎么解决呢?我希望PONumber能够自动增加.

Phi*_*ley 9

如果在插入行时生成了SupplierQuoteId和PONumber,则将以锁步方式分配两个"标识"列(3504与9553一起,3506与9573一起,3508与9593一起,等等).如果这个假设是正确的,那么你可能会将PONumber设为计算列,如下所示:

CREATE TABLE SupplierQuote 
( 
supplierQuoteID int NOT NULL identity (3504,2) CONSTRAINT supquoteid_pk PRIMARY KEY, 
PONumber AS (10 * supplierQuoteID - 25487)
. 
. 
. 
); 
Run Code Online (Sandbox Code Playgroud)

我使supplierQuoteId NOT NULL,这确保了PONumber也将是NOT NULL.同样,您不再需要PONumber上的唯一约束,因为它始终是唯一的.(如果需要一个性能,可以在计算列上构建索引.)


And*_*ite 7

每个表不能有多个标识列.我认为你最好的选择是将PO数据拉入一个单独的表中,然后将两者与FK列相关联.

SupplierQuote
-------------
supplierQuoteID (PK/identity)
purchaseOrderID (FK to PurchaseOrder.purchaseOrderID)
otherColumn1

PurchaseOrder
-------------
purchaseOrderID (PK/identity)
otherColumn1
Run Code Online (Sandbox Code Playgroud)