我正在尝试在SQL Server中创建一个计算列。
这是创建列的脚本。
CREATE TABLE [dbo].[Invoice]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[InvoiceID] AS (('INV' + FORMAT(GETUTCDATE(), 'yyyyMMdd')) + RIGHT('000000' + CONVERT([VARCHAR](20), [ID]), (7))),
[Name] [nvarchar](50) NOT NULL,
[CreatedOn] [datetime] NOT NULL
CONSTRAINT [DF_Invoice_CreatedOn] DEFAULT (getutcdate())
) ON [PRIMARY]
GO
它将返回InvoiceId
列的值,如下所示:
ID InvoiceID Name CreatedOn
--- -------------------- ------- -----------------------
1 INV201705090000001 amki 2017-05-09 13:11:06.790
2 INV201705090000002 amkit 2017-05-09 13:11:26.600
3 INV201705090000003 amkit3 2017-05-09 13:11:32.397
4 INV201705090000004 amkit6 2017-05-09 13:11:35.070
但我想更多地修改它。
当服务器日期改变时,它再次从1开始。
这是我的预期输出。
ID InvoiceID Name CreatedOn
--- -------------------- ------- -----------------------
1 INV201705090000001 amki 2017-05-09 13:11:06.790
2 INV201705090000002 amkit 2017-05-09 13:11:26.600
3 INV201705090000003 amkit3 2017-05-09 13:11:32.397
4 INV201705100000001 amkit6 2017-05-10 13:11:35.070
5 INV201705100000002 amkit6 2017-05-10 13:11:35.070
6 INV201705110000001 amkit6 2017-05-11 13:11:35.070
从上面的结果可以看出,它再次从 1 开始,其中日期从 20170509 变为 20170510 。
如果无法使用计算列完成,那么还有其他任何方法可以实现此目的。
我知道有很多关于如何创建计算列的帖子。但是,如果日期发生变化,我不会再从1开始。