用存储过程处理插入值重复时(如果插入id值存在时,在存在id值增1后再插入)
create table ta(id int primary key,name varchar(20))
insert ta
select 1,'a'
union all select 2,'b'
union all select 3,'c'
union all select 12,'d'
union all select 13,'e'
用存储过程:
create proc test_p @id int,@name varchar(20)
as
begin
declare @j int,@sql varchar(1000)
if exists(select 1 from ta where id=@id)
begin
select @j=@id,@sql=''
while exists(select 1 from ta where id=@j)
begin
select @sql=@sql+','+rtrim(id) from ta where id=@j
select @j=@j+1
end
set @sql=stuff(@sql,1,1,'')
exec('update ta set id=id+1 where id in ('+@sql+')')
insert ta select @id,@name
end
else
insert ta select @id,@name
end
测试:
exec test_p 1,'f'
exec test_p 8,'h'
exec test_p 12,'g'
查询:
select * from ta
id name
----------- --------------------
1 f
2 a
3 b
4 c
8 h
12 g
13 d
14 e
(所影响的行数为 8 行)
--drop proc test_p
--drop table ta
分享到:
相关推荐
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
插入金蝶任务单存储过程,自动获取ID,插入生产任务单。
2) /*设置循环次数*/ BEGIN WAITFOR DELAY ‘000:00:10’ /*延迟时间10秒*/ INSERT INTO time_by_day (time_id, the_date, the_year, month_of_year, quarter, day_of_month) SELECT TOP 1 time_id + 1 AS time_id,...
SQL Server存储过程添加一条记录并返回新添加记录的ID号。
存储以name_id为主键的索引,待插入或更新数据为: 一般会有有两种操作: 以下图片为个人见解,我没试过能不能直接运行,但形式上没错。 数据不存在,我需要插入地址为空字符串。 单条插入: ...
3)没有数据,进行插入数据处理(返回值:1)。 【创建存储过程】 Create proc Insert_Update @Id varchar(20), @Name varchar(20), @Telephone varchar(20), @Address varchar(20), @Job varchar(20), @...
SqlServer 在中获得自增ID的两种方式.存储过程或SQL语句中插入数据后,自动获取自增的ID
在页面指定位置插入新结点! <form id="form1" name="form1" action="#" method="get"> <input type="text" id="field1" name="field1"> 前插入" onclick="appendBefore('innerDiv', document.form1.field1.value)...
1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>sqlplus SQL>connect internal SQL>startup SQL>quit b、关闭ORACLE系统 oracle>sqlplus SQL>...
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。 2、你可以使用光标上下键调出以前的命令...
在sql sever中实现插入数据的自动增长是很容易的,但是在oracle数据库中实现这一操作不是很容易,同时要想在.net中实现获取新插入数据的id,而且不会出现读错的情况,就更显得困难了,为了解决在oracle数据中插入的...
json字符串传至客户端后在javascript脚本下需将字符串转换为json数据对象,示例如下: var objJson = eval('('+strJson+')'); public string GetJsonByModel(CalendarNotesModel model) 解析业务实体对象为json数据...
auto_increment自增模式,设置自增后在插入数据的时候就不需要给该列插入值了。 4、 foreign key 约束 外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照...
自增 ID 可以保证每次插入时 B+ 树索引是从右边扩展的,因此相比自定义 ID (如 UUID)可以避免 B+ 树的频繁合并和分裂。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。 4、如何选择存储引擎? ...
1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> Create DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现...
2、(1)编写和执行存储过程,将Northwind数据库中的Orders表的指定EmployeeID对应的所有定单的Freight(费用)加上一个指定的金额(注:存储过程带输入参数);(2)在(1)基础上 ,存储过程还必须返回被修改的定...
--若该台号处于空闲状态(在表 t_using_desk 中 usingType_code = '01'),则表明该台号即将被使用,需生成 sOrderNo, 向 t_order 表中增加该订单的信息,然后执行存储过程 sp_orderDishes ------------------------...
1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' +...
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高...当插入一条数据有“_id”值,并且现在集合中已经有相同的值,使用insert插入时插入不进去,使用save时,会更新数据。