我是SQL Server的新手。我需要知道是否有一个存储过程来生成每天从“1”开始的序列号。
还需要知道我是否可以用C#方法调用这个存储过程。
要求是我将接收大量记录,因为序列应该从1开始并且应该增加到一天结束。然后在第二天它应该再次重置为'1'等等。在SP中,当我从C#方法调用时,我应该得到最顶行(最后插入的序列号)。
任何人都可以帮我这个吗? 注意:我将收到请求消息中的一条记录 问候 戈皮
答案 0 :(得分:1)
您可以通过引入新表来存储日期和序列号来实现此目的。
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作为运行编号向表中插入新行。表格中只有一行。
答案 1 :(得分: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
如果不将字段,表名更改为本地名称,这将无法使用,您可能必须使用BETWEEN
进行日期检查。它假定您有一个标识字段(RecordID),并且还设置了添加记录的日期(DateEntered)。此外,@ RequiredDate是存储过程的参数,它将成为其中的一部分。
没有足够的信息来回答您的C#问题。