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 数据库自增字段中插入值,如果非要这么干 ...
随机推荐
- 20160125--Spring
package com.hanqi; import java.util.*; import com.hanqi.User; public class HelloWorld { public Hello ...
- Can't load IA 32-bit .dll on a AMD 64-bit platform
在myeclipse中使用的,tomcat异常:java.lang.UnsatisfiedLinkError: D:\JAVA\ApacheTomcat\bin\tcnative-1.dll: Can ...
- mysql存储过程和触发器的应用
***********[mysql 存储过程和触发器 -- 别安驹]********************* 1.什么情况下使用存储过程? 完成一些比较麻烦的逻辑,比如多表在mysql端的cpu很空 ...
- Windows vista以上模拟Alt Ctrl Delete
之前客户要求我们能够在windows登陆界面能够用指定账户批量控制机器登陆,然后用windows credentials provider(vista以上,xp需要用Gina)实现了这个功能,这期间遇 ...
- hdu 4639 Hehe (dp)
一道dp题,转移方程不是自己推出来的. 题目的意思是用‘qnmlgb’替换‘hehe’,可以替换也可以不替换,问有多少种情况. 如果结尾不是‘hehe’,那么dp[i]=dp[i-1],如果是是‘he ...
- Java Eclipse常规设置
改变字体大小 eclipse英文版中如何去修改字体及方法?首先打开eclipse中,按下面的方法即可菜单项:window ->preferences -> general -> ap ...
- 浅谈C中的指针和数组(三)
上一个博客我们得到了一个结论: 指针和数组根本就是两个完全不一样的东西.只是它们都可以“以指针形式”或“以下标形式”进行访问.一个是完全的匿名访问,一个是典型的具名+匿名访问.一定要注意的是这个“以X ...
- jquery插件anccordion
(function(){ $.fn.YAccordion=function(options){ var settings={ trigger:'click', speed:300, }; if(opt ...
- 解决IE8下VS2005,VS2008一些向导提示脚本错误问题
Some VS2005 and VS2008 Wizards Pop Up Script Error. Visual C++ team has discovered that after inst ...
- mysql错误提示不是英语的解决办法
mysql提示突然就变成法语了,google了一下,找到了解决方法:打开my.ini文件,找到[mysqld]配置项如下 [mysqld] port explicit_defaults_for_tim ...