在Insert语句中使用SQL函数
我的数据库中有一个发票表,其中插入了新发票。最近,我们升级了服务,许多用户将发票插入表中。我编写了一个函数,用于计算序列中的下一个发票编号(序列不仅仅是序列编号) 我现在想在insert语句中使用这个函数,如下所示在Insert语句中使用SQL函数,sql,sql-server,function,Sql,Sql Server,Function,我的数据库中有一个发票表,其中插入了新发票。最近,我们升级了服务,许多用户将发票插入表中。我编写了一个函数,用于计算序列中的下一个发票编号(序列不仅仅是序列编号) 我现在想在insert语句中使用这个函数,如下所示 INSERT INTO [Invoice] ([InvoicedTo] ,[InvoiceNumber] ,[InvoiceDate] ,[Description] ,[Amount]) VALUES (@InvoicedTo ,NextInvoiceNumber(@Pre
INSERT INTO [Invoice]
([InvoicedTo]
,[InvoiceNumber]
,[InvoiceDate]
,[Description]
,[Amount])
VALUES
(@InvoicedTo
,NextInvoiceNumber(@Prefix)
,@InvoiceDate
,@Description
,@Amount)
我想确保的是,使用此insert语句将确保在多个用户生成发票时,发票编号不会重复。如果它可以导致重复,我将感谢如何阻止任何重复发生的建议
非常感谢,保罗不,它不能保证独一无二
您应该将调用包装在一个可序列化的事务中。您需要在事务中嵌入插入脚本(开始和提交/回滚),并使用适当的参数。不知道这是否有用
begin tran
declare @nextInvoiceNumber int = dbo.NextInvoiceNumber(@Prefix)
INSERT INTO [Invoice]
([InvoicedTo]
,[InvoiceNumber]
,[InvoiceDate]
,[Description]
,[Amount])
VALUES
(@InvoicedTo
,@nextInvoiceNumber
,@InvoiceDate
,@Description
,@Amount)
commit
您可以/应该做的另一件事是向表中添加一个要求它唯一的约束。
然后在发生这种情况时添加错误处理,这将为您提供另一个号码
begin tran
declare @nextInvoiceNumber int = dbo.NextInvoiceNumber(@Prefix)
INSERT INTO [Invoice]
([InvoicedTo]
,[InvoiceNumber]
,[InvoiceDate]
,[Description]
,[Amount])
VALUES
(@InvoicedTo
,@nextInvoiceNumber
,@InvoiceDate
,@Description
,@Amount)
commit