我是 SQL Server 的新手。我需要知道是否有一个存储过程来生成每天从“1”开始的序列号。
还需要知道我是否可以在 C# 方法中调用此存储过程。
要求是我将收到大量记录,因为序列应该从 1 开始,并且应该递增到一天结束。然后在第二天它应该再次重置为“1”,依此类推。在 SP 中,当我从 C# 方法进行调用时,我应该得到最上面的行(最后插入的序列号)。
谁可以帮我这个事?注意:请求消息中会有一条记录,我会收到问候 Gopi
我是 SQL Server 的新手。我需要知道是否有一个存储过程来生成每天从“1”开始的序列号。
还需要知道我是否可以在 C# 方法中调用此存储过程。
要求是我将收到大量记录,因为序列应该从 1 开始,并且应该递增到一天结束。然后在第二天它应该再次重置为“1”,依此类推。在 SP 中,当我从 C# 方法进行调用时,我应该得到最上面的行(最后插入的序列号)。
谁可以帮我这个事?注意:请求消息中会有一条记录,我会收到问候 Gopi
最简单的方法可能是使用计算/生成的字段。类似的东西(未测试):
DECLARE @StartID int
SELECT @StartID = (SELECT TOP 1 RecordID FROM MyTable WHERE DateEntered = @RequiredDate ORDER BY RecordID DESC)
SELECT
RecordID - @StartID + 1 AS SequenceNumber,
OtherData
FROM MyTable
WHERE DateEntered = @RequiredDate
如果不将字段、表名更改为本地名称,这将不起作用,您可能必须使用 aBETWEEN
进行日期检查。它假定您有一个身份字段 (RecordID),并且您还设置了添加记录的日期 (DateEntered)。@RequiredDate 也是存储过程的一个参数,这将是它的一部分。
没有足够的信息来回答您的 C# 问题。
您可以通过引入一个新表来存储日期和序列号来实现这一点。
CREATE TABLE [dbo].[IDENTITY_TABLE](
[SEQUENCE_DATE] [datetime] NOT NULL,
[RUNNING_NUMBER] [int] NOT NULL
)
存储过程将查询该表并返回序列的下一个编号。当前日期必须作为参数传递给存储过程。
DECLARE @SequenceDate datetime
DECLARE @NextNumber int
SELECT @SequenceDate=[SEQUENCE_DATE]
FROM [IDENTITY_TABLE]
IF CAST(@SequenceDate AS DATE)=CAST(@CurrentDate AS DATE)
BEGIN
SELECT @NextNumber=[RUNNING_NUMBER]+1
FROM [IDENTITY_TABLE]
UPDATE [IDENTITY_TABLE] SET [RUNNING_NUMBER]=@NextNumber
END
ELSE
BEGIN
SET @NextNumber=1
UPDATE [IDENTITY_TABLE] SET [SEQUENCE_DATE]=@CurrentDate,[RUNNING_NUMBER]=1
END
RETURN @NextNumber
第一次您必须在表中插入一个新行,当前日期和 0 作为运行编号。只有一行必须在表中。