1. SQL server 2008 R2数据迁移到2008
1.1. 情况描述
今天,特意查阅了一下为什么在sql server 2008 R2上建的数据库迁移到sql server 2008上就出错,问题的关键在于如何保留原有表结构的主键、外键等,分两个情况,对于数据库数据量小的,可以很方便的解决。
1.2. 第一种:小数据的情况
- 先在低版本的服务器上建立同名的数据库.
- 在高版本的服务器上右键点击目标数据库->任务->生成脚本.
- 在选择对象->选择特定数据库对象.
- 选择表、视图、存储过程,然后下一步.
- 关键在这,这一步里,请选择”高级“,选项里选择[编写DROP和Create脚本]项的”编写DROP和Create脚本“.
- 选择服务器数据库版本.
- 选择[编写脚本和数据类型]项的“架构和数据".
- 保存脚本,在低版本的数据库下执行脚本即可.
1.3. 第二种:大数据的情况
按理应该也可以通过类似包含架构和数据的方式来做,但是由于包含大数据的时候脚本文件太大,无法在分析器里执行,所以我们得绕一下.
- 1~4步和小数据情况相同.
- 这步我们选择”高级“,选项里选择[编写DROP和Create脚本]项的”编写DROP和Create脚本“,以及[为服务器版本编写脚本] sql server 2008(具体看数据库的版本),最后选[编写脚本和数据类型]项的“架构".
- 保存脚本.
- 在低版本的数据下执行脚本,注意(ALTER TABLE 表名 WITH CHECK ADD CONSTRAINT [外键名] FOREIGN KEY(字段)REFERENCES表名(字段))这个先不要执行.
- 现在可以通过导入导出任务先将表的内容导入到低版本的数据库内.
- 再执行脚本内(ALTER TABLE 表名 WITH CHECK ADD CONSTRAINT [外键名] FOREIGN KEY(字段) REFERENCES 表名(字段))这样的语句,此处将表的外键附加上.
2. SQL Server 修改数据表名前的用户
1.只修改表前用户
EXEC sp_MSforeachtable 'exec sp_changeobjectowner "?","dbo" '
2.用户表/存储过程/视图/触发器/自定义函数一起改
declare tb cursor local for select 'sp_changeobjectowner ''['+replace(user_name(uid),']',']]')+'].['+replace(name,']',']]')+']'',''dbo''' from sysobjects where xtype in('U','V','P','TR','FN','IF','TF') and status>=0 open tb declare @s nvarchar(4000) fetch tb into @s while @@fetch_status=0 begin exec(@s) fetch tb into @s end close tb deallocate tb