C# 怎样自动生成流水号
点击添加怎样自动生成流水号保存到数据库表id字段中?流水号是个三位数,初始化从000开始,添加一次累加一次,打开之前要判断数据库表id字段中是否有数据,有的话取出最大的作...
点击添加怎样自动生成流水号保存到数据库表id字段中? 流水号是个三位数,初始化从000开始,添加一次累加一次,打开之前要判断数据库表id字段中是否有数据,有的话取出最大的作为初始值。
展开
5个回答
展开全部
你要什么样格式的?
给你个生成流水号的存储过程看看,这个是字母加日期的流水号,三个输入参数。
USE [WXLH_MES]
GO
/****** Object: StoredProcedure [dbo].[P_Get_SYS_SERAIL] Script Date: 09/22/2015 14:03:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: evan
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[P_Get_SYS_SERAIL]
-- 序列号类型头
@TITLETYPE NVARCHAR(10) ,
-- 自增长长度
@LENGTH INT ,
-- 获得新的序列号
@RESULT NVARCHAR(100) OUT
AS
BEGIN
DECLARE @TYPE NVARCHAR(10);
DECLARE @LEN INT;
DECLARE @PREFIX NVARCHAR(20);
SET @TYPE = @TITLETYPE;
SET @LEN = @LENGTH;
--SET @PREFIX = CONVERT(NVARCHAR(10), GETDATE(), 112);
SET @PREFIX = SUBSTRING(CONVERT(NVARCHAR(10), GETDATE(), 112),3,LEN(CONVERT(NVARCHAR(10), GETDATE(), 112))-2);
IF NOT EXISTS ( SELECT *
FROM dbo.tb_serials
WHERE serial_type = @TYPE )
BEGIN
INSERT INTO dbo.tb_serials
( serial_type ,
next_value ,
prefix ,
sn_length
)
VALUES ( @TYPE , -- serial_type - varchar(50)
1 , -- next_value - bigint
@PREFIX , -- prefix - nvarchar(30)
@LEN -- sn_length - int
)
END
IF NOT EXISTS ( SELECT *
FROM dbo.tb_serials
WHERE serial_type = @TYPE
AND prefix = @PREFIX )
BEGIN
UPDATE dbo.tb_serials
SET prefix = @PREFIX ,
next_value = 1
WHERE serial_type = @TYPE
END
DECLARE @strResult NVARCHAR(40);
SELECT @strResult = ( serial_type + prefix + REPLICATE('0',
@LEN
- LEN(next_value))
+ CAST(next_value AS NVARCHAR) )
FROM tb_serials
WHERE serial_type = @TYPE
AND prefix = @PREFIX
UPDATE dbo.tb_serials
SET next_value = 1 + next_value
WHERE serial_type = @TYPE
set @RESULT= @strResult
END
给你个生成流水号的存储过程看看,这个是字母加日期的流水号,三个输入参数。
USE [WXLH_MES]
GO
/****** Object: StoredProcedure [dbo].[P_Get_SYS_SERAIL] Script Date: 09/22/2015 14:03:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: evan
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[P_Get_SYS_SERAIL]
-- 序列号类型头
@TITLETYPE NVARCHAR(10) ,
-- 自增长长度
@LENGTH INT ,
-- 获得新的序列号
@RESULT NVARCHAR(100) OUT
AS
BEGIN
DECLARE @TYPE NVARCHAR(10);
DECLARE @LEN INT;
DECLARE @PREFIX NVARCHAR(20);
SET @TYPE = @TITLETYPE;
SET @LEN = @LENGTH;
--SET @PREFIX = CONVERT(NVARCHAR(10), GETDATE(), 112);
SET @PREFIX = SUBSTRING(CONVERT(NVARCHAR(10), GETDATE(), 112),3,LEN(CONVERT(NVARCHAR(10), GETDATE(), 112))-2);
IF NOT EXISTS ( SELECT *
FROM dbo.tb_serials
WHERE serial_type = @TYPE )
BEGIN
INSERT INTO dbo.tb_serials
( serial_type ,
next_value ,
prefix ,
sn_length
)
VALUES ( @TYPE , -- serial_type - varchar(50)
1 , -- next_value - bigint
@PREFIX , -- prefix - nvarchar(30)
@LEN -- sn_length - int
)
END
IF NOT EXISTS ( SELECT *
FROM dbo.tb_serials
WHERE serial_type = @TYPE
AND prefix = @PREFIX )
BEGIN
UPDATE dbo.tb_serials
SET prefix = @PREFIX ,
next_value = 1
WHERE serial_type = @TYPE
END
DECLARE @strResult NVARCHAR(40);
SELECT @strResult = ( serial_type + prefix + REPLICATE('0',
@LEN
- LEN(next_value))
+ CAST(next_value AS NVARCHAR) )
FROM tb_serials
WHERE serial_type = @TYPE
AND prefix = @PREFIX
UPDATE dbo.tb_serials
SET next_value = 1 + next_value
WHERE serial_type = @TYPE
set @RESULT= @strResult
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
展开全部
你不是已经把思路写出来了吗。
就是取出最大值,无数据就为1.
就是取出最大值,无数据就为1.
更多追问追答
追问
我不知道怎么判断表里面是否有数据,也不知道怎么取出最大值,我想初始化三位数001总是会变成1,小白就代码,
追答
判断是否有数据: 查询数据库 select max(id) from biao 其他代码自己写。
001是字符串,在数据库中如果为int类型 那么会变成1,可以用varchar类型
在程序中就定义为string,就可以为001.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
流水号由8位日期加8位顺序号组成,如2010030200000056。
先从数据库中取中最大的流水号,和此时要生成的日期比较是否在同一天,是则顺序号加1,否则重新以此时日期生成流水号
方法一,通过sql:
select max(serialnumber) as maxSerialNumber from tb
从数据库获取最大流水号后,调用GetSerialNumber方法。
/// <summary>
/// 生成充值流水号格式:8位日期加8位顺序号,如2010030200000056。
/// </summary>
public string GetSerialNumber(string serialNumber)
{
if (serialNumber != "0")
{
string headDate = serialNumber.Substring(0, 8);
int lastNumber = int.Parse(serialNumber.Substring(8));
//如果数据库最大值流水号中日期和生成日期在同一天,则顺序号加1
if (headDate == DateTime.Now.ToString("yyyyMMdd"))
{
lastNumber++;
return headDate + lastNumber.ToString("00000000");
}
}
return DateTime.Now.ToString("yyyyMMdd") + "00000001";
}
方法二
/生成消费单号,按日期生成单号,默认是年月日+四位数字,如:200906010001;后四位数字可以自动增长位数。
///LastNumStr目前数据库中最后的单号
public static String Assignment(String LastNumStr)
{
string number0 = "";
DateTime date = System.DateTime.Now;
string year = date.Year.ToString();
string month = date.Month.ToString();
string day = date.Day.ToString();
if (month.Length < 2)
month = '0' + month;
if (day.Length < 2)
day = '0' + day;
string ymd = year + month + day;
if (LastNumStr.Length < 8 || LastNumStr.Substring(0, 8) != ymd)
{
return ymd + "0001";
}
else
{
Int32 clientnumber = Convert.ToInt32(LastNumStr.Substring(8, LastNumStr.Length - 8)) + 1;
if (clientnumber.ToString().Length > LastNumStr.Length - 8)
{
return ymd + clientnumber.ToString();
}
else
{
for (int i = 0; i < LastNumStr.Length - 8 - clientnumber.ToString().Length; i++)
{
number0 += "0";
}
return ymd + number0 + clientnumber.ToString();
}
}
}
先从数据库中取中最大的流水号,和此时要生成的日期比较是否在同一天,是则顺序号加1,否则重新以此时日期生成流水号
方法一,通过sql:
select max(serialnumber) as maxSerialNumber from tb
从数据库获取最大流水号后,调用GetSerialNumber方法。
/// <summary>
/// 生成充值流水号格式:8位日期加8位顺序号,如2010030200000056。
/// </summary>
public string GetSerialNumber(string serialNumber)
{
if (serialNumber != "0")
{
string headDate = serialNumber.Substring(0, 8);
int lastNumber = int.Parse(serialNumber.Substring(8));
//如果数据库最大值流水号中日期和生成日期在同一天,则顺序号加1
if (headDate == DateTime.Now.ToString("yyyyMMdd"))
{
lastNumber++;
return headDate + lastNumber.ToString("00000000");
}
}
return DateTime.Now.ToString("yyyyMMdd") + "00000001";
}
方法二
/生成消费单号,按日期生成单号,默认是年月日+四位数字,如:200906010001;后四位数字可以自动增长位数。
///LastNumStr目前数据库中最后的单号
public static String Assignment(String LastNumStr)
{
string number0 = "";
DateTime date = System.DateTime.Now;
string year = date.Year.ToString();
string month = date.Month.ToString();
string day = date.Day.ToString();
if (month.Length < 2)
month = '0' + month;
if (day.Length < 2)
day = '0' + day;
string ymd = year + month + day;
if (LastNumStr.Length < 8 || LastNumStr.Substring(0, 8) != ymd)
{
return ymd + "0001";
}
else
{
Int32 clientnumber = Convert.ToInt32(LastNumStr.Substring(8, LastNumStr.Length - 8)) + 1;
if (clientnumber.ToString().Length > LastNumStr.Length - 8)
{
return ymd + clientnumber.ToString();
}
else
{
for (int i = 0; i < LastNumStr.Length - 8 - clientnumber.ToString().Length; i++)
{
number0 += "0";
}
return ymd + number0 + clientnumber.ToString();
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select @@IDENTITY
能够获得你下次插入的ID
能够获得你下次插入的ID
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询