SQLSERVER如何导入数据保持ID不变(ID为自增主键)
2017-01-20 13:37
417 查看
使用SQL SERVER最操蛋的就是导入数据,以前用企业管理器直接导数据,导一次骂N次娘,在骂了微软无数次娘之后总结了一个方法揍合着还算受用。
其核心要点就是要将数据结构导入到目标数据库服务器上,再来导数据,如果直接使用sql企业管理器向目标数据库导入数据,就会发生一系列操蛋的问题:
ID不能自增了、ID改变了、主键索引被删了。
其实直接导还是有办法保持id主键自增、id不变的,就是到了编辑映射这一步,要依次选中每个表编辑映射,编辑sql,在id列加上PRIMARY KEY IDENTITY(1,1),然后勾选标识插入,这样导过去的数据和本地数据就是一样的,但是表多的话,修改sql相当蛋疼。
所以不得不说一句真TMD的操蛋,微软更新无数次数据库版本了还是没好好解决一下这个问题,就不能来个一键导入数据吗。
而实际使用中,可能附加数据库还比较常用,但是微软TMD不停的更新版本,导致个人电脑和公司电脑和服务器电脑,另外还可能会更换服务器,这些电脑上的版本不一样,就无法附加数据库,一般的技术人员可能很少用,但作为站长兼程序员的人,应该深有体会。
下文要说的就是先导入结构,再导入数据!
首先在源数据库上右键-任务-生成脚本,下一步,下一步,到了保存sql文件这里点高级,接下来有两种情况:
1:导出数据结构和数据(适合少量数据,几千条以内,数据多了脚本文件太大在sql软件上无法执行,要用sqlcmd,但这个工具要看人品,人品不好遇到一大堆操蛋的问题,还有另一个方法是osql,直接用win32 cmd执行sql文件,但速度慢,我上次几万条数据执行了20多分钟)。
首先,在高级里面找到为服务器版本编写脚本这项,右边选择你的服务器数据库版本,其次,找到要编写脚本的数据的类型这项,右边选择架构和数据。
然后点确定,继续下一步完成。
把生成的sql文件在你的服务器上的sql软件里面打开,根据需要可以修改一下脚本中的数据库地址,点击执行,就会自动创建数据库、表,然后导入数据(如果数据库存在,先删除)。
上面这种情况是你可以在服务器上删除、创建数据库,如果不能删除重新创建,那就要使用原先的数据库,所以在服务器上打开脚本找到alter database 把前面的代码全部删掉,接下来脚本中的数据库名称如果和服务器上的不一样就改一下,执行脚本。
![](https://images2015.cnblogs.com/blog/566634/201701/566634-20170120124602187-1525891139.jpg)
注意一个问题:
如果数据库存在不能删除重建,那就删除数据库里面的表,删除代码中alter database前面的代码,修改脚本中的database名称,再执行。
2:仅导出结构。
导出结构后把代码考到服务器数据库上去执行,默认会创建数据库,所以如果数据库存在就先删除,不能删除的话,就删除里面的表,删除代码中alter database前面的代码,修改脚本中的database名称,再执行,这样就能在服务器上创建好数据库结构,接下来是导入数据。
如果是少量数据,可以到直接生成脚本,高级里面选择仅导出数据,然后在服务器上直接执行。
如果是大量数据,用sql企业管理器连接目标数据库(直接在本地数据库右键导出数据,再去连目标数据库也行),
右键导入数据,然后直到选择表源和源视图这里,勾选要导入的表和视图后,然后看看这些一一对应的表对应的行是不是选中状态(不是前面那个勾,是整行),点击下面的编辑映射:
![](https://images2015.cnblogs.com/blog/566634/201701/566634-20170120131051062-107622326.jpg)
如果是第一次导入数据,勾选启用标识插入,一直下一步就能导入成功。
如果不是第一次,表中有数据,就同时勾选删除现有表中的行和标识插入,或者把三个勾都勾上,这里值得一提的按我们人的正常理解可以勾选“删除并重新创建目标表和启用标识插入”就行了啊,表都删除重建了肯定旧数据不在了噻,但是TM不行,这样导入后之前的数据居然还存在,你说脑残不脑残,所以这里要么勾最后两个,要么三个全勾上。
顺便说一下:批量编辑映射这个功能好像只有sql2008及以上版本才有,之前使用sql2005还没有,只能一个表一个表的编辑映射,有几十个表的情况下你可以想象,基本上是修改一个表,骂一次娘。
其核心要点就是要将数据结构导入到目标数据库服务器上,再来导数据,如果直接使用sql企业管理器向目标数据库导入数据,就会发生一系列操蛋的问题:
ID不能自增了、ID改变了、主键索引被删了。
其实直接导还是有办法保持id主键自增、id不变的,就是到了编辑映射这一步,要依次选中每个表编辑映射,编辑sql,在id列加上PRIMARY KEY IDENTITY(1,1),然后勾选标识插入,这样导过去的数据和本地数据就是一样的,但是表多的话,修改sql相当蛋疼。
所以不得不说一句真TMD的操蛋,微软更新无数次数据库版本了还是没好好解决一下这个问题,就不能来个一键导入数据吗。
而实际使用中,可能附加数据库还比较常用,但是微软TMD不停的更新版本,导致个人电脑和公司电脑和服务器电脑,另外还可能会更换服务器,这些电脑上的版本不一样,就无法附加数据库,一般的技术人员可能很少用,但作为站长兼程序员的人,应该深有体会。
下文要说的就是先导入结构,再导入数据!
首先在源数据库上右键-任务-生成脚本,下一步,下一步,到了保存sql文件这里点高级,接下来有两种情况:
1:导出数据结构和数据(适合少量数据,几千条以内,数据多了脚本文件太大在sql软件上无法执行,要用sqlcmd,但这个工具要看人品,人品不好遇到一大堆操蛋的问题,还有另一个方法是osql,直接用win32 cmd执行sql文件,但速度慢,我上次几万条数据执行了20多分钟)。
首先,在高级里面找到为服务器版本编写脚本这项,右边选择你的服务器数据库版本,其次,找到要编写脚本的数据的类型这项,右边选择架构和数据。
然后点确定,继续下一步完成。
把生成的sql文件在你的服务器上的sql软件里面打开,根据需要可以修改一下脚本中的数据库地址,点击执行,就会自动创建数据库、表,然后导入数据(如果数据库存在,先删除)。
上面这种情况是你可以在服务器上删除、创建数据库,如果不能删除重新创建,那就要使用原先的数据库,所以在服务器上打开脚本找到alter database 把前面的代码全部删掉,接下来脚本中的数据库名称如果和服务器上的不一样就改一下,执行脚本。
![](https://images2015.cnblogs.com/blog/566634/201701/566634-20170120124602187-1525891139.jpg)
注意一个问题:
如果数据库存在不能删除重建,那就删除数据库里面的表,删除代码中alter database前面的代码,修改脚本中的database名称,再执行。
2:仅导出结构。
导出结构后把代码考到服务器数据库上去执行,默认会创建数据库,所以如果数据库存在就先删除,不能删除的话,就删除里面的表,删除代码中alter database前面的代码,修改脚本中的database名称,再执行,这样就能在服务器上创建好数据库结构,接下来是导入数据。
如果是少量数据,可以到直接生成脚本,高级里面选择仅导出数据,然后在服务器上直接执行。
如果是大量数据,用sql企业管理器连接目标数据库(直接在本地数据库右键导出数据,再去连目标数据库也行),
右键导入数据,然后直到选择表源和源视图这里,勾选要导入的表和视图后,然后看看这些一一对应的表对应的行是不是选中状态(不是前面那个勾,是整行),点击下面的编辑映射:
![](https://images2015.cnblogs.com/blog/566634/201701/566634-20170120131051062-107622326.jpg)
如果是第一次导入数据,勾选启用标识插入,一直下一步就能导入成功。
如果不是第一次,表中有数据,就同时勾选删除现有表中的行和标识插入,或者把三个勾都勾上,这里值得一提的按我们人的正常理解可以勾选“删除并重新创建目标表和启用标识插入”就行了啊,表都删除重建了肯定旧数据不在了噻,但是TM不行,这样导入后之前的数据居然还存在,你说脑残不脑残,所以这里要么勾最后两个,要么三个全勾上。
顺便说一下:批量编辑映射这个功能好像只有sql2008及以上版本才有,之前使用sql2005还没有,只能一个表一个表的编辑映射,有几十个表的情况下你可以想象,基本上是修改一个表,骂一次娘。
相关文章推荐
- sqlserver 2005 利用游标解决标量值函数主键自增id批量导入数据问题
- 如果数据表中‘Id’为主键,如何利用数据库自带工具导入数据呢
- 从远程导入表数据时,如何保持自增字段的值不变。
- SQLServer 如何获取刚插入数据的Id号
- 如何高效地批量导入数据到SqlServer
- SQLServer 如何获取刚插入数据的Id号
- 一个通用的单元测试框架的思考和设计07-实现篇-自动管理测试数据-如何为自增长主键id赋值
- 牛腩 40,41,42 整合新闻内容页 如何用LinkButton传数据,验证码的使用,保持滚动条不变,锚链接
- SQLServer 如何获取刚插入数据的Id号
- 如何获取数据库新插入数据的主键id
- sqlserver中如何删除没有主键的重复数据。
- Mysql如何指定新插入的数据的起始自增主键id
- 如何写出一条SQL语句:取出表A中第31~40条记录(SQLServer,以自动增长的ID作为主键
- 如何从sqlserver中把表数据导入到oracle? .
- 你好,C++(8)如何表达那些始终保持不变的数据量?3.2.2 常量
- 在C#中如何动态创建access数据库并对SQLserver中的数据导入进去
- [导入]将纯数字导入Excel时数据格式仍保持不变的方法
- 使用NEWSEQUENTIALID解决GUID聚集索引问题 SQLServer数据表主键的另一个方案
- SQLServer 如何获取刚插入数据的Id号
- 如何从一个表中随机地取出20 条不重复的数据? 主键是Id