`
wsql
  • 浏览: 11781012 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

用存储过程处理插入值重复时(如果插入id值存在时,在存在id值增1后再插入)

 
阅读更多

用存储过程处理插入值重复时(如果插入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万条数据

    MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...

    插入金蝶任务单存储过程

    插入金蝶任务单存储过程,自动获取ID,插入生产任务单。

    用SQL批量插入数据的存储过程

    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,...

    存储过程添加一条记录并返回ID

    SQL Server存储过程添加一条记录并返回新添加记录的ID号。

    Python中elasticsearch插入和更新数据的实现方法

     存储以name_id为主键的索引,待插入或更新数据为:    一般会有有两种操作:   以下图片为个人见解,我没试过能不能直接运行,但形式上没错。  数据不存在,我需要插入地址为空字符串。  单条插入:  ...

    SQLServer用存储过程实现插入更新数据示例

    3)没有数据,进行插入数据处理(返回值:1)。 【创建存储过程】 Create proc Insert_Update @Id varchar(20), @Name varchar(20), @Telephone varchar(20), @Address varchar(20), @Job varchar(20), @...

    SqlServer 在中获得自增ID的两种方式.txt

    SqlServer 在中获得自增ID的两种方式.存储过程或SQL语句中插入数据后,自动获取自增的ID

    页面内js结点插入与追加(可更改为ajax模式)

    在页面指定位置插入新结点! <form id="form1" name="form1" action="#" method="get"> <input type="text" id="field1" name="field1"> 前插入" onclick="appendBefore('innerDiv', document.form1.field1.value)...

    orcale常用命令

    1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>sqlplus SQL>connect internal SQL>startup SQL>quit b、关闭ORACLE系统 oracle>sqlplus SQL>...

    MYSQL常用命令大全

     1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。  2、你可以使用光标上下键调出以前的命令...

    .net实现oracle数据库中获取新插入数据的id的方法

    在sql sever中实现插入数据的自动增长是很容易的,但是在oracle数据库中实现这一操作不是很容易,同时要想在.net中实现获取新插入数据的id,而且不会出现读错的情况,就更显得困难了,为了解决在oracle数据中插入的...

    多功能.NET代码自动生成器(含存储过程)

    json字符串传至客户端后在javascript脚本下需将字符串转换为json数据对象,示例如下: var objJson = eval('('+strJson+')'); public string GetJsonByModel(CalendarNotesModel model) 解析业务实体对象为json数据...

    mysql数据库的基本操作语法

    auto_increment自增模式,设置自增后在插入数据的时候就不需要给该列插入值了。 4、 foreign key 约束 外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照...

    mysql储存相关的面试题目精选

    自增 ID 可以保证每次插入时 B+ 树索引是从右边扩展的,因此相比自定义 ID (如 UUID)可以避免 B+ 树的频繁合并和分裂。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。 4、如何选择存储引擎? ...

    MySQL命令大全

    1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> Create DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现...

    sqlserver6次实验(2)

    2、(1)编写和执行存储过程,将Northwind数据库中的Orders表的指定EmployeeID对应的所有定单的Freight(费用)加上一个指定的金额(注:存储过程带输入参数);(2)在(1)基础上 ,存储过程还必须返回被修改的定...

    sql 游标、存储过程

    --若该台号处于空闲状态(在表 t_using_desk 中 usingType_code = '01'),则表明该台号即将被使用,需生成 sOrderNo, 向 t_order 表中增加该订单的信息,然后执行存储过程 sp_orderDishes ------------------------...

    数据库操作语句大全(sql)

    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快速入门笔记(三)之MongoDB插入文档操作

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高...当插入一条数据有“_id”值,并且现在集合中已经有相同的值,使用insert插入时插入不进去,使用save时,会更新数据。

Global site tag (gtag.js) - Google Analytics