sql server新增数据时主键自动生成

sql server新增数据时主键自动生成
生成规则为四位年份+二位月份+三位流水号
如:201812001、201812002
这个应该怎么解决,目前思路是写函数,函数应该怎么写,求各位大神帮忙

sql

2个回答

create function getTestUID()
returns VARCHAR(10)
as
BEGIN
DECLARE @UID VARCHAR(10)
DECLARE @UYEARMOTHN VARCHAR(6)
DECLARE @MaxId VARCHAR(10)
DECLARE @SORE INT
set @UYEARMOTHN = CONVERT(varchar(6),GETDATE(),112) --如果不想取当前年月的话,根据你的情况 直接赋值为 201802
select @MaxId = isnull(max(uId),0) from test222 -- 注意改成自己的表名
IF (@MaxId=0 )
BEGIN
SET @UID = @UYEARMOTHN+'001' --建议流水号设大些吧, 下面的判断相应的改
END
ELSE
BEGIN
SET @SORE = Convert(int,RIGHT(@MaxId,3))
IF(@SORE>=99)
BEGIN
set @UID = @UYEARMOTHN + convert(VARCHAR,(@SORE+1))
END
ELSE IF(@SORE>=9)
BEGIN
set @UID = @UYEARMOTHN + '0'+convert(VARCHAR,(@SORE+1))
END
ELSE IF(@SORE>0)
BEGIN
set @UID = @UYEARMOTHN + '00'+convert(VARCHAR,(@SORE+1))
END
END

RETURN @UID

END

select dbo.getTestUID()

qq_40052730
qq_40052730 回复xin292930540: 谢谢大神,已经搞定了,字符串也加上了
9 个月之前 回复
qq_40052730
qq_40052730 回复xin292930540: 您好大神,如果我想在这个生成的单号前再加个字符串'SQD',该怎么加,我现在加上之后显示不完全
9 个月之前 回复
xin292930540
xinboyXu 回复qq_40052730: IF (@MaxId=0 ) BEGIN SET @UID = @UYEARMOTHN+'001' END ELSE IF(CONVERT(int,@UYEARMOTHN)>CONVERT(int,LEFT(@MaxId,6))) --多加一个判断,如果当前年月大于取出的最大年月值说明进下了,另一个月,或另一年了。 BEGIN SET @UID = @UYEARMOTHN+'001' END ELSE
10 个月之前 回复
qq_40052730
qq_40052730 非常感谢,谢谢
10 个月之前 回复

/**
*
* @param start 编号开头
* @param num 从数据库查询出的最大编号
* @return
*/
public static String getNum(String start,String num){
String n = num.substring(0, 3);
if(!n.equals(start)){
System.out.println("编号的开头于数据库取得的编号开头不同");
return "";
}
String strDate = "";//流水号时间
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
Date date = new Date();
//格式化当前时间,并按字符‘-’分隔
String[] sd = sdf.format(date).split("-");
//截取编号中的日期
String time = num.substring(3, 11).toString();
for(int i=0;i strDate += sd[i];
}
//如果当天或者表中没有记录,返回当天第一条记录
if(!time.equals(strDate) || num.equals("")){
return start + strDate + "0001";
}
//截取编号最后的流水号
String end = num.substring(11, 15);
String s2 = "";
int lg = Integer.parseInt(end);
//对流水号结尾的四位数字进行判断,以便增加
if(lg>0&lg s2 = "000"+(lg+1);
}else if(lg>=9 && lg s2 = "00"+(lg+1);
}else if(lg>=99 && lg s2 = "0"+(lg+1);
}else if(lg>999 && lg<9999){
s2 = "" + (lg+1);
}
//返回自动生成的流水号
return start+= strDate + s2;
}
可以根据我这个demo写,不知道是不是这个意思

qq_40052730
qq_40052730 我希望是再数据库总创建函数,insert语句时只需要调用函数就可以了
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
SQL server 已插入数据如何自动生成主键
有一个列名为RecnoPK,我们想让它成为主键,但在制表的时候,没有设为主键,现在已经导入很多数据rnrnRecnoPK code namernnull 1 arnnull 1 brn...rn除了编程,如何用sql语句或设置实现让RecnoPK有值,而且不重复,可以修改表,让它变成主键。
mybatis获取新增数据时的主键
&amp;lt;insert id=&quot;save&quot; parameterType=&quot;pd&quot; useGeneratedKeys=&quot;true&quot; keyProperty=&quot;news_id&quot;&amp;gt;parameterType:参数类型keyProperty:主键名
MyBatis新增时的序列主键
select SEQ_ZZ_PETITIONERS.NEXTVAL from DUAL INSERT INTO T_ZZ_PETITIONERS ( MI_ID,CI_RS_ID,IS_RESOLVE,IS_CONTROL,IS_THREE_CROSS) VALUES ( #{miId,jdbcType=DECIMAL},#{ciRsId,jdbcType=DECIMA
SQL SERVER 数据自动生成SQL语句
选中SQL SERVER 数据库中的表,自动根据表结构及里面的数据,自动生成SQL语句,方便把数据导入到其它的数据库中,比较适合用于安装程序的制作工具了
自动生成主键
@UUID:为String类型的属性声明自动生成UUID,属性如下: 属性 说明 length 定义生成的UUID的长度,默认长度为32。 举例: @UUID(length=30) private String planId;     ...
主键自动生成
<p>rn 课程目标:rn1、让初学者从小白开始,善于运用知识点,解脱学习的苦恼rn2、能够学习更多的工作中使用技巧,成为编程高手rn</p>rn<p>rn MyBatis 它支持定制化 SQL、存储过程以及映射。代码和手动设置参数获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录rn</p>rn<p>rn <br />rn</p>
新增SQL Server 数据表
开发工具与关键技术:PowerDesigner+SQL Server 2014 Management Studio 作者:杨灵武 撰写时间:2019/05/27 设置表名,Name:是在这里显示的名字,Code:是数据库里的名字,记住一定最好不要出现有中文。名字命名完之后点击Columns标签,设置字段属性,设置如图所示: Name:是字段名是可以用中文来命名的,但是Code是真正在SQL中的...
sql server 主键问题
我要在几万行数据里插入条数据,而且数据每条数据有几百K,没设主键前数据奇慢而且会超时,设好主键后就不会有这个问题了,为什么啊??
sql server主键问题
[img=d:\12.bmp][/img]rn请问这个问题是怎么回事rn主键为什么顺序颠倒了,需要说明的是我把SQL SERVER2008的数据库通过脚本方式导入到sql server2005后,rn然后向sql server 中插入数据就变成这样了,然而SQL SERVER2008中主键是正常的顺序排列的
SQL server 主键自增长
我想实现一个主键rnrn他的生成规则为:rnrnSO0001rnSO0002rnSO0003rnrn字母SO为必有项,数字从0001开始自增长。rnrn我怎么在建表的时候,把主键的自增长规则定义进去呢?
SQL server 自动生成流水号
自动为每一条插入的数据按照自己设定的格式生成流水号
SQL Server自动生成日期
请问SQL Server当记录存进去的时候,就会自动把系统时间加进去,不必后台代码再去编写,怎么实现?急急!!
sql server自动生成编号
SQL Server 自动生成编号 新建表 create table ceshi ( number varchar(20) ) 2.自动生成编号 use table  ceshi declare @x int select @x =1 while @x begin insert  into three (number) values
ADO + SQLServer,主键是自动生成GUID(newID()),新增时ADO取不回默认生成的主键,怎么办?
谢谢.
SQL 置顶新增的数据
置顶新增的project_building_floor数据,表的关系如下 SQL如下 select f.id,f.name,f.floor_no,f.status,p.name as project_name,b.name as building_name,f.create_time,f.project_id,f.building_id from project_building_f...
MySQL 新增时忽略重复主键
在新增数据时,如果主键重复会报错 更多精彩 更多技术博客,请移步 asing1elife’s blog 解决 在 INSERT INTO 之间加入 IGNORE 关键字,可以防止报错,数据虽然不会插入成功,但会返回 0 INSERT IGNORE INTO ( id, name ) VALUES ( 1, 'Tom' ) ...
数据窗口updata()时,如何处理数据库自动生成的int主键???
我这个菜鸟想问问大侠们,数据窗口在用updata()时,如何处理数据库自动生成的int主键啊??
新增药品信息时自动生成药品编号
自动生成药品编号的方法如下所示rnpublic ActionResult getYaoPinBianHao()rn rn //YP 20 18 0531 0 001rn string YaoPinBianHao = "";//定义当前编码的字符串rn var year = DateTime.Now.Year.ToString();rn var month = DateTime.Now.Month.ToString().Length == 1 ? "0" + DateTime.Now.Month.ToString() : DateTime.Now.Month.ToString();rn var day = DateTime.Now.Day.ToString().Length == 1 ? "0" + DateTime.Now.Day.ToString() : DateTime.Now.Day.ToString();rn string todate = year + month + day;rn //查询所有部门信息,以SupplierNumber排序rn var listNumber = (from tbDrug in myModels.PW_Drugrn orderby tbDrug.DrugCode descendingrn select tbDrug).ToList();rn if (listNumber.Count > 0)//判断listNumber中是否有数据rn rn //获取药品的数据的条数rn int count = listNumber.Count;rn //YP201805310001rn PW_Drug modelDep = listNumber[0];rn int intCode = Convert.ToInt32(modelDep.DrugCode.Substring(11, 4));//Substring(11,4)截取字符串,1代表字符串起始位置,4表示截取长度rn /*int intCod = Convert.ToInt32(modelDep.DrugCode.Substring(11, 4)); */ //最后一个药品编码+1 // int intDate = Convert.ToDateTime(modeldate.IndentNumber.);rn intCode++;rn //对新的药品编码格式化rn YaoPinBianHao = intCode.ToString();rnrn rn for (int i = 0; i < 4; i++)rn //循环判断strCurrentCode的长度是否大于4,如果不是就在strCurrentCode前面加"0",否则strCurrentCode=strCurrentCodern YaoPinBianHao = YaoPinBianHao.Length < 4 ? "0" + YaoPinBianHao : YaoPinBianHao;//三目运算符rn rn YaoPinBianHao = "YP" + todate + YaoPinBianHao;rn rn elsern rn YaoPinBianHao = "00001";rn YaoPinBianHao = "YP" + todate + YaoPinBianHao;rn // YaoPinBianHao = "YP 2018531";//如果count=0,科室编码strCurrentCode从D0001开始rn rn return Json(YaoPinBianHao, JsonRequestBehavior.AllowGet);//返回Json格式的数据rn rnrn
MySQL新增数据、主键冲突、蠕虫复制
新增数据 标准语法 Insert into 表名 [(字段列表)]values(值列表); 在数据插入的时候,假设主键对应的值已经存在:插入一定会失败! 主键冲突 当主键存在冲突的时候(duplicate key)可以选择性的进行处理,更新和替换 主键冲突:更新操作 Insert into 表名[(字段列表:包含主键)] values(值列表)on duplicate key update 字段=...
sql中,如何得到新增数据的id(主键自增)
sql2000中,如何得到新增数据的id(主键自增)
Linux+MySQL+MyCat+ZooKeeper,实现新增数据的主键全局自增
MyCat主键全局自增 ①先在Linux上启动三个ZooKeeper节点, 可参考笔记:https://dpb-bobokaoya-sm.blog.csdn.net/article/details/87924077 ②然后修改mycat/conf/ 目录下的schema.xml文件: ③然后配置server.xml文件,来使用ZooKeeper实现主键全局自增 ...
oracle 在插入数据库时自动生成主键
在插入数据时,希望主键时根据当前表的主键,自动生成:seq_【表明】.nextval。 实例:aaa.seq_bbb.nextval。aaa为schema,bbb为表名
mybites 新增数据并且把主键返回
useGeneratedKeys=&quot;true&quot;把新增加的主键赋值到自己定义的keyProperty(id)中useGeneratedKeys   默认值是:false。 含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。 &amp;lt;insert id=&quot;insert&quot; useGeneratedKeys=&quot;true&quot; keyP...
oracle中插入数据时自动生成主键的触发器
create or replace trigger ChangeMessageSequenceTrigger before insert on MESSAGEINFORMATION for each row declare message_num messageinformation.messagenum%type; begin select messageinformation_
sql新增语句怎么返回主键
现象: 主键使用NEWID() 函数生成 mybatis 链接 sqlservice 新增加一条数据怎么返回刚刚新增的主键、 方法: 1:serviceImpl实现层新增语句传入不带id的对象 这里对象传入进去的时候 getId 是没有值的 2:sql语句在新增语句执行之前执行主键的生成 select NEWID() as id 设置在语句执行之前就在对象的id存入 N...
mybatis 新增主键返回sql (Map传参)
由于项目用的是oracle 贴出代码片段&amp;lt;selectKey keyProperty=&quot;id&quot; resultType=&quot;java.lang.String&quot; order=&quot;BEFORE&quot;&amp;gt; Select fn_seq_format(S_hog_role_profile.nextval, 'HR') as id from dual &amp;lt;/selectKey&amp;gt;这段写在新增语句之前...
MyBatis —— 创建数据自动生成32位UUID主键
文章目录MyBatis —— 创建数据自动生成32位UUID主键简介如何处理错误 MyBatis —— 创建数据自动生成32位UUID主键 简介 数据表主键定义为32位UUID,插入时不想在程序中使用UUIDUtil,在My 如何处理 &lt;insert id="insertSelective" parameterType="com.asset.disposal.entity.po.slave....
DB2 新增主键
db2
SQL Server 新增字段的问题
SQL Server 2008 每次给表增加字段之后,页面显示就会出错rn原因在于页面提取数据用到了视图,每次都要alter一下视图(其实视图并不需要做改动)rnrn不知道什么新增字段之后要alter一下相关视图?
新增返回主键
接口 public void add(T obj); 调用 insert into u_user( nickname ,email ,pswd
SQL语句怎样自动生成表的主键?
CREATE TABLE table1( [ID] int Not NULL, [NAME] varchar(50), PRIMARY KEY (ID) )rnrn我想在希望这个ID是自动生成的,比如创建一条记录,我只需要插入Name, int 从1开始自动+1
Sql Server主键与外键的关系?
在Sql Server中创建外键约束时,主表中的那一列一定要是主键吗?从表中的列也必须是主键吗?
sql server主键设置问题
primary key之后还要加上not null吗?rnrn[code=SQL]create table testrn(rnid int primary key,rnname varchar(40) rn)[/code]rnrn
MS SQL Server 主键的设计
表(货品名称,型号,数量),怎么样写SQL语句把货品编号和型号都设为主键?
关于主键和外键sql server
我是一个初学者,请问,我创建了两个表,如:rn表1的结构:number(主键),name(unique约束),sex,birthday,addressrn表2的结构:name(外键),bookname,telphone,countryrn我的认为是在表1被操作的时候,表2也会随着变化,例如,向表1加数据,表也会把相应的数据填写进去,是吗?rnrn还有一个问题就是,用哪种数据类型好varchar,char!!rn请向告,非常感激!!
sql server 主键插入问题
id是自增主键,如何把已知的一个id插入,而不用它自动生成的那个id?
SQL SERVER 主键的冲突问题
我在SQL Server有个表叫Table1吧,里面定义了个字段暂叫Fld1,它是个主键(Primary key)rn类型是个字符型的,我想请问一下,如果我导入的记录中包含了这样的2条记录, 对于Fld1,rn一条记录是K234,大写的K,另一条是k234,小写的k,请问这样的记录能导入进去吗?rn会有主键冲突吗?
sql server创建复合主键
[color=red][size=medium]创建复合主键:[/size][/color] [code=&quot;java&quot;] 方法一:创建表之后,alter table table_name add primary key(字段1,字段2) 方法二:CREATE TABLE 表名 (字段名1 Int Not Null, 字段名2 n...
SQL Server查询表主键的方法
--查詢主鍵信息SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='表名'
sql server中建主键的问题
我要把一个表中的两个字段都作为主键,怎么建立啊,他只能建一个主键
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview