0

我是 SQL Server 的新手。我需要知道是否有一个存储过程来生成每天从“1”开始的序列号。

还需要知道我是否可以在 C# 方法中调用此存储过程。

要求是我将收到大量记录,因为序列应该从 1 开始,并且应该递增到一天结束。然后在第二天它应该再次重置为“1”,依此类推。在 SP 中,当我从 C# 方法进行调用时,我应该得到最上面的行(最后插入的序列号)。

谁可以帮我这个事?注意:请求消息中会有一条记录,我会收到问候 Gopi

4

2 回答 2

0

最简单的方法可能是使用计算/生成的字段。类似的东西(未测试):

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# 问题。

于 2013-09-03T11:48:30.530 回答
0

您可以通过引入一个新表来存储日期和序列号来实现这一点。

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 作为运行编号。只有一行必须在表中。

于 2013-09-04T09:58:55.097 回答