`

给库中所有表添加主键和自动增长标识

阅读更多

要将库表导入到另外一个服务器上,库表结构和数据都导入成功,但是约束(主键和自动增长标识)丢失,最终在库中建立游标解决了,模拟代码如下:

use master
go
if exists(select * from sysdatabases where name='mytest')
    drop database mytest
go
create database mytest
go
use mytest
go
create table user1
(
 mid int  ,
 name varchar(25)
)
go
create table user2
(
 mid int,
 name varchar(25)
)
go

select * from user1
select * from user2
--drop table  user1
--drop table  user2

--*****start*****--
DECLARE @table_name sysname  --保存表名的全局变量
-- 获得所有User表
DECLARE tables_cursor CURSOR FOR select name from sysobjects where xtype='U' and status>0 --(加入这个条件是因为前面的条件查询出来的结果带有"dtproperties"非用户所建的表,应该还有其他滤去该表的条件)
 OPEN tables_cursor
 -- Perform the first fetch
 FETCH NEXT FROM tables_cursor INTO @table_name
 -- Check @@FETCH_STATUS to see if there are any more rows to fetch.
 WHILE @@FETCH_STATUS = 0
 BEGIN
 -- 遍历表@table_name的每条记录
 -- 动态生成执行语句
 exec ( 'alter   table '+  @table_name+'   drop   column   mid '     )
 exec ('alter   table '+  @table_name +'  add   mid  int primary key  IDENTITY(1,1) ')
 FETCH NEXT FROM tables_cursor INTO @table_name
 END
 CLOSE tables_cursor         --CLOSE语句关闭已打开的游标,之后不能对游标进行读取等操作,但可以使用OPEN语句再次打开该游标
 DEALLOCATE tables_cursor    --DEALLOCATE语句删除定义游标的数据结构,删除后不可再用

(关于DEALLOCATE:http://www.yesky.com/imagesnew/software/tsql/ts_de-dz_7vxh.htm)
--*****end*****--

 

分享到:
评论

相关推荐

    小议sqlserver数据库主键选取策略

    因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误...自动增长型字段允许我们在向数据库添加数据时,不考虑主键的取值,记录插入后,数据库系统会自动为其分配一个值,确保

    Hibernate3.1_学习源码

    04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计都会为一个表添加一个自动增长的主键标识列。其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建...

    sql文件编辑器,免费版

     23、自动标识主键(主键字段标识为-*-字段名-*-)  24、冻结指定行、列功能。使查看操作更加方便  25、数据集更改后,在提交前可选查看所有更改的部分数据。并用颜**分。  26、自定义我的收藏功能。  27、...

    Hibernate注解

    * GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型) * GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用) * generator 指定...

    ado[1].net中文手册 学习 ado.net的重要资料

    检索“标识”或“自动编号”值:提供一个特定示例,它将为 Microsoft SQL Server 表中的“标识”(Identity) 字段所生成的值以及 Microsoft Access 表中的“自动编号”(Autonumber) 字段映射到表中插入行的列。...

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

    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表 (select a from tableA ) except (select a from tableB) except (select a from tableC) 17、说明:随机取出10条...

    注册表修改大全(作者:Sunny)

    在Windows98系统中,鼠标的右键功能虽然很强但还不够完善,这里我们为其增加“快速启动”和“关闭系统”的两个选项,来完善鼠标的右键功能。 点击HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\DIRECTORY\SHELL,用鼠标...

    Toad 使用快速入门

    支持代码自动更正,如输入ndf,自动替换成NO_DATA_FOUND,输入the自动替换成the,类似的自动替换还可以自己修改和添加。 7. 方便的左边行号显示,单击左边行号就可以实现调试断点的增加/删除 8. 对各种快捷键的...

    。net图书管理系统设计方案

    数据表设计时,最好不要使用用户输入的信息作为主键,每一个数据表自己定义一个主键,添加信息是由程序自动添加,这样就可以减少数据更新时产生的错误。表与表相关联的外键最好是由程序自动生成的主键,这样数据库就...

    经典SQL语句大全

    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表 (select a from tableA ) except (select a from tableB) except (select a from tableC) 17、说明:随机取出10条...

    sql经典语句一部分

    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表 (select a from tableA ) except (select a from tableB) except (select a from tableC) 17、说明:随机取出10条...

    数据库设计命名规范.docx

    数据库设计命名规范全文共6页,当前为第1页。数据库设计命名规范全文共6页,当前...如自动增长主键) 表内不应该存储依赖于其他键的非键信息 索引命名规范 索引须按照IDX_table_<column>_,其中是建立索引的表名,<colum

    2009达内SQL学习笔记

    给表起别名,表<空格>表别名;)。 如:Select first_name EMPLOYEES, 12*(salary+100) AS MONEY, manager_id "ID1" From s_emp E; 4、字段的拼接,可用双竖线(双竖线只能用于select语句里)。不同的DBMS可能使用不同...

    21天学会SQL

    9.2.1 查询表中所有数据 171 9.2.2 查询表中指定字段的数据 172 9.2.3 查询结果中去除重复信息 174 9.2.4 根据现有列值计算新列值 174 9.2.5 命名新列 175 9.2.6 将查询结果保存为新表 176 9.2.7 连接字段 177 9.3 ...

    sqlserver自定义函数

    在查询结果中增加一个自动增长的ID select id=identity(int, 1, 1), * into #T from testTable select * from #T drop table #T sql删除重复的记录 打开测试数据库test,并以表w01为例,将下面的SQL语句放入sql...

    【总结】数据库自增字段的 3 种实现方式

    在设计数据库的表结构时,经常会使用一个自动增长的数字序列作为主键字段(代理主键)。除了作为主键使用之外,自增字段也可以用于记录各个操作发生的先后顺序,因为它具有递增特性。当我们插入一行数据时,数据库会...

    net学习笔记及其他代码应用

    33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。 答:解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * ...

    SQL sever 实训

    --使用ALTER TABLE 语句为已经创建的表添加主键约束、外键约束 --主键 ALTER TABLE Customer ADD CONSTRAINT PK_Customer PRIMARY KEY(CusNo) GO ALTER TABLE Product ADD CONSTRAINT PK_Product PRIMARY KEY...

    java面试题

    答:标识是为了方便和简介映射文件,主键是为了让数据不会重复。 为什么每次请求都要创建一个Action对象? 答:Struts2每次请求的时候都会创建一个action实例,这样会保证线程的安全。Struts1只是在第一次请求的...

    SQL语法大全

    sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据...

Global site tag (gtag.js) - Google Analytics