• IDENTITY 的小技巧SQL Server 2005


    备份数据库遇到一个问题,就是将旧数据搬移到新主机数据表的时候,如果主键是的 IDENTITY 是设定自动增加的话,那么旧有的主键数据,在新数据表上面就好像是重新编号一样又从第 1 笔开始塞到第 N 笔。

    例如 :

    某台主机上旧有数据如下,C1 字段是自动编号,但是可能经过使用者动作,可能只剩下 1、3、4、7、11 这几笔。

    clip_image002

    塞到新数据表,C1 字段就变成 1、2、3、4、5 完全走样了。

    clip_image004

    后来发现原来要设定 IDENTITY_INSERT 的选项,才有办法自己设定自动编号的域值。

    语法如下:

    代码
    -- 开启 TestTable 的 IDENTITY_INSERT 属性

    SET IDENTITY_INSERT TestTable ON

    -- 关闭 TestTable 的 IDENTITY_INSERT 属性

    SET IDENTITY_INSERT [TestTable] OFF

    --如果要重设数据表的 IDENTITY 的编号的话,则要使用 DBCC CHECKIDENT 指令来设定,以下为操作范例:

    -- 将数据表数据删除, 并重设 IDENTITY

    TRUNCATE TABLE [TestTable]

    -- 开启数据表可自行输入 IDENTITY 的功能

    SET IDENTITY_INSERT [TestTable] ON

    -- 准备数据源

    CREATE TABLE #tt
    (
    C1
    int,
    C2
    nvarchar(50),
    C3
    nvarchar(50)
    )

    INSERT INTO #tt ( C1, C2, C3 )
    VALUES ( 1, '1', '2' )
    INSERT INTO #tt ( C1, C2, C3 )
    VALUES ( 3, '2', '4' )
    INSERT INTO #tt ( C1, C2, C3 )
    VALUES ( 4, '3', '6' )
    INSERT INTO #tt ( C1, C2, C3 )
    VALUES ( 7, '4', '8' )
    INSERT INTO #tt ( C1, C2, C3 )
    VALUES ( 11, '5', '10' )


    -- 将数据源塞入目的数据表

    INSERT INTO [TestTable] ( C1, C2, C3 )
    SELECT *
    FROM #tt

    Drop table #tt

    -- 关闭数据表可自行输入 IDENTITY 的功能, 由系统自行指定
    SET IDENTITY_INSERT [TestTable] ON

    -- 将数据表的 IDENTITY 设为 11 (下一笔资料为 12)

    DBCC CHECKIDENT (TestTable, reseed, 11)
    DBCC CHECKIDENT (TestTable, reseed)
    用以上语法产生新的 TestTable 就跟旧有的数据表一模一样啰。

    clip_image002[1]

  • 相关阅读:
    Csharp: ASP.NET Core 3.1 Razor Pages Query and Pagination
    人脸识别示例
    C# 调用WCF服务的两种方法
    linux磁盘空间满处理情况
    linux上PGI编译器安装
    jeecgboot中自定义sql分页实现
    顺畅访问github的一种新思路和方案
    eduYouke在线教育点播系统
    基于SpringBoot的在线教育系统【源码开源】【建议收藏】
    解决ThinkPHP6 控制器不存在:app\controller\Index
  • 原文地址:https://www.cnblogs.com/RuiLei/p/1682070.html
Copyright © 2020-2023  润新知