我有一个简单的表格,如下所示。
CREATE TABLE dbo.KeyNumbers (
RowId INT IDENTITY
,ProFormaNumber NCHAR(10) NULL
,SalesOrderNumber NCHAR(10) NULL
,PurchaseOrderNumber NCHAR(10) NULL
,InvoiceCreditNoteNumber NCHAR(10) NULL
,InvoiceNumber NCHAR(10) NULL
,PurchaseInvoiceCreditNoteNumber NCHAR(10) NULL
,ModifiedDate DATETIME NULL
,CONSTRAINT PK_KeyNumbers PRIMARY KEY CLUSTERED (RowId)
) ON [PRIMARY]
该表用于存储公司的关键文档编号(发票编号、销售订单编号等),因此只需要一行。与该表的主要交互是通过存储过程完成的,因此最终用户永远不需要访问它,但我想知道 SQL Server 中是否有一种方法可以主动限制该表只有一行,并且能够在设计阶段做到这一点。
编辑
证明戈登的建议很有效
最佳答案
显而易见的方法是在插入时使用触发器来确保表为空。
我从未尝试过此操作,但计算列上的索引也可能有效:
alter table dbo.KeyNumbers add OneAndOnly as ('OneAndOnly');
alter table dbo.KeyNumbers add constraint unq_OneAndOnly unique (OneAndOnly);
如果插入第二行,这应该会生成唯一键冲突。
关于sql - 是否可以在设计阶段限制sql表只有一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104876/