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 修改表自增列的值的更多相关文章

  1. SQL Server 2012 自动增长列,值跳跃问题(自增增加1000)

    介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...

  2. SQL Server 2012 自动增长列,值跳跃问题

    介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...

  3. sql server 获取自增列下一个值或者获取指定表的主键值

    IDENT_CURRENT('TableName')为当前的最大标识值, IDENT_INCR('TableName')为设置的标识值增量, 两者相加即为下一个标识值 如: SELECT IDENT_ ...

  4. 【sql进阶】SQL Server 将某一列的值拼接成字符串

    今天在统计报表的时候有这么一个需求,将一列字符串拼接成一行,然后展示到新的列中. 每一项的服务列表如下: 最终想要的结果是 sql如下: select AuxTypeName + ',' from ( ...

  5. SQL Server 将某一列的值拼接成字符串

    名称 海鲜水产 水果蔬菜 海参 肉禽蛋 牛排 腊味 生鲜食品 将以上一列变成: 生鲜食品,海鲜水产,水果蔬菜,海参,牛排,肉禽蛋,腊味 sql for xml path('')

  6. SQL Server获取自增列下一个Id

    IDENT_CURRENT('TableName')为当前的最大标识值,IDENT_INCR('TableName')为设置的标识值增量, 两者相加即为下一个标识值 SELECT IDENT_CURR ...

  7. sql Server 使某一列的值等于行号

    declare @i INT update 表名 SET [列名]=@i,@i=@i+ WHERE 条件

  8. sql server 将某一列的值拼成一个字符串 赋值到一个字段内

    DECLARE @refCodeitems VARCHAR(800),   SELECT @refCodeitems=ISNULL(@refCodeitems,'')+refCodeitem +'/' ...

  9. SQL Server数据库自增字段正确的插入值的描述

    我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...

随机推荐

  1. split 函数自己实现

    要求自己实现split函数 def mySplit(str,delimiter): result = [] start = 0 pos = str.find(delimiter, start) whi ...

  2. php7 install memcached extension

    #download source code package from git $ git clone https://github.com/php-memcached-dev/php-memcache ...

  3. SSH整合,applicationContext.xml中配置hibernate映射文件问题

    今天在applicationContext.xml中配置sessionFactory时遇到了各种头疼的问题,现在总结一下: 1.<property name="mappingDirec ...

  4. EBS OAF中如何在多行表中实现附件功能

    EBS OAF中如何在多行表中实现附件功能 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 在OAF中使用附件功能之前,要先明白Entity( ...

  5. Android Every day a new function:two

    分享功能: 效果图: 代码(分享TEXT,视频或者图片设置type即可): @Override protected void onCreate(Bundle savedInstanceState) { ...

  6. Android API在不同版本系统上的兼容性

    随着安卓版本的不断更新,新的API不断涌出,有时候高版本的API会在低版本crash的. 如果minSdkVersion设置过低,在build的时候,就会报错(Call requires API le ...

  7. CreateFileMapping共享内存时添加Global的作用

    来源:http://www.cnblogs.com/elvislogs/articles/ShareMemory.html 通常使用CreateFileMapping建立共享内存时名称中没有加入&qu ...

  8. eclipse 快捷键汇总

    1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2 显示搜索对话框:Ctrl+H快速O ...

  9. vb6.0 时间日期

    使用year(now)可以得到4位数的年    你还可以用Format来得到, 还有FormatDateTime 下面两种都是一样的结果:  FormatDateTime(now,vbLongDate ...

  10. core_cm3.c解析

    CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系 ...