sql server 修改表自增列的值
Create PROCEDURE [dbo].[SP_UpdateIdentityId]
(
@tableName NVARCHAR(100) ,
@beforeId INT ,
@afterId INT
)
AS
BEGIN
IF @beforeId IS NULL
OR @afterId IS NULL
OR @tableName IS NULL
BEGIN
PRINT 'param is null'
RETURN
END DECLARE @tb_id INT= OBJECT_ID(@tableName)
IF @tb_id IS NULL
BEGIN
PRINT 'table not exist'
RETURN
END DECLARE @identityId NVARCHAR(200) SET @identityId = ( SELECT name
FROM sys.columns
WHERE object_id = @tb_id
AND is_identity = 1
) IF @identityId IS NULL
BEGIN
PRINT 'table not exist identity column'
RETURN
END DECLARE @columns NVARCHAR(MAX)
SET @columns = ( SELECT ',' + name
FROM sys.columns
WHERE object_id = @tb_id
AND is_identity = 0
FOR
XML PATH('')
)
SET @columns = STUFF(@columns, 1, 1, '') --PRINT @columns DECLARE @sql NVARCHAR(MAX) SET @sql = 'SELECT *
INTO #tmp_update_identity
FROM ' + @tableName + '
WHERE ' + @identityId + ' = @beforeId if not exists(select 1 from #tmp_update_identity)
begin
print ''beforeId row data not exist''
return
end if exists(select 1 from ' + @tableName + ' WHERE ' + @identityId
+ ' = @afterId)
begin
print ''afterId row data already exist''
return
end ALTER TABLE #tmp_update_identity DROP COLUMN ' + @identityId + ' begin try
BEGIN TRANSACTION TRANSACTION_SP_UpdateIdentityId;
DELETE FROM ' + @tableName + ' WHERE ' + @identityId + ' = @beforeId SET IDENTITY_INSERT ' + @tableName + ' ON INSERT ' + @tableName + '(' + @identityId + ' ,' + @columns + ')
SELECT @afterId,* FROM #tmp_update_identity DROP TABLE #tmp_update_identity
print ''ok''
select 1 [state]
COMMIT TRANSACTION
end try
begin catch
print '' try catch ROLLBACK TRANSACTION''
ROLLBACK TRANSACTION
end catch
'
--PRINT @sql IF EXISTS ( SELECT *
FROM tempdb..sysobjects
WHERE id = OBJECT_ID('tempdb..#tmp_update_identity') )
DROP TABLE #tmp_update_identity EXEC sys.sp_executesql @sql,
N'@tableName NVARCHAR(100) , @beforeId INT , @afterId INT',
@tableName, @beforeId, @afterId IF EXISTS ( SELECT *
FROM tempdb..sysobjects
WHERE id = OBJECT_ID('tempdb..#tmp_update_identity') )
DROP TABLE #tmp_update_identity END
默认限制修改后的Id在数据库中不存在!
sql server 修改表自增列的值的更多相关文章
- SQL Server 2012 自动增长列,值跳跃问题(自增增加1000)
介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...
- SQL Server 2012 自动增长列,值跳跃问题
介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...
- sql server 获取自增列下一个值或者获取指定表的主键值
IDENT_CURRENT('TableName')为当前的最大标识值, IDENT_INCR('TableName')为设置的标识值增量, 两者相加即为下一个标识值 如: SELECT IDENT_ ...
- 【sql进阶】SQL Server 将某一列的值拼接成字符串
今天在统计报表的时候有这么一个需求,将一列字符串拼接成一行,然后展示到新的列中. 每一项的服务列表如下: 最终想要的结果是 sql如下: select AuxTypeName + ',' from ( ...
- SQL Server 将某一列的值拼接成字符串
名称 海鲜水产 水果蔬菜 海参 肉禽蛋 牛排 腊味 生鲜食品 将以上一列变成: 生鲜食品,海鲜水产,水果蔬菜,海参,牛排,肉禽蛋,腊味 sql for xml path('')
- SQL Server获取自增列下一个Id
IDENT_CURRENT('TableName')为当前的最大标识值,IDENT_INCR('TableName')为设置的标识值增量, 两者相加即为下一个标识值 SELECT IDENT_CURR ...
- sql Server 使某一列的值等于行号
declare @i INT update 表名 SET [列名]=@i,@i=@i+ WHERE 条件
- sql server 将某一列的值拼成一个字符串 赋值到一个字段内
DECLARE @refCodeitems VARCHAR(800), SELECT @refCodeitems=ISNULL(@refCodeitems,'')+refCodeitem +'/' ...
- SQL Server数据库自增字段正确的插入值的描述
我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...
随机推荐
- MySql5.6Window超详细安装教程(msi 格式的安装)
转自:红黑联盟 http://www.2cto.com/database/201506/409821.html 一.安装包准备 1.下载MySql5.6 http://www.mysql.com/ ...
- mysql 5.6.20的安装、配置服务、设置编码格式
一.安装 安装环境 系统:Window 32 版本:Mysql 5.6.20 1. 首先从官网上http://dev.mysql.com/downloads/mysql/ ...
- 移动web开发
在现代网页开发中,新增了一个移动设备网页开发,在这样的需求下,你需要考虑如何将移动web和pc web同步处理 /* * 浏览器如何识别移动设备 * */ var ua = navigator.use ...
- Android 6.0 以及HttpClient
Android 6.0 SDK,API Level 是 23.更新之后,就可以修改 compileSdkVersion 和targetSdkVersion 到 23 体验新的特性了. 同时 Andro ...
- TCP 监控工具 TCPMonitor
1, membrane monitor Download: http://www.membrane-soa.org/downloads/archive/monitor-archive.htm 2, a ...
- eclipse同步远程服务器
eclipse里有一个强大的插件,可以直接在本地编辑远程服务器代码,Eclipse Remote System Explorer (RSE) 下载安装方法: 一.下载,高版本的eclipse可以直接下 ...
- MVC入门
MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C 则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据可以分别用柱状图.饼图 ...
- keep健身计划
下一个月计划 1keep二周计划 2百度第一期学完 3百度前端技术学院提升
- NYOJ-252 01串
01串 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有"11"子串的这样的长 ...
- mac电脑批量解压android apk文件图形化工具--apkDecode
mac电脑apk文件解压软件,简单的用图形界面将apktools包装了下,使用起来非常简单,可以将apk文件批量解压缩,方便大家查看一些东东,仅供学习目的. 使用步骤如下: 1 下载apkDecode ...