SQL-Server 使用笔记

1. SQL server 2008 R2数据迁移到2008

1.1. 情况描述

今天,特意查阅了一下为什么在sql server 2008 R2上建的数据库迁移到sql server 2008上就出错,问题的关键在于如何保留原有表结构的主键、外键等,分两个情况,对于数据库数据量小的,可以很方便的解决。

1.2. 第一种:小数据的情况

  1. 先在低版本的服务器上建立同名的数据库.
  2. 在高版本的服务器上右键点击目标数据库->任务->生成脚本.
  3. 在选择对象->选择特定数据库对象.
  4. 选择表、视图、存储过程,然后下一步.
  5. 关键在这,这一步里,请选择”高级“,选项里选择[编写DROP和Create脚本]项的”编写DROP和Create脚本“.
  6. 选择服务器数据库版本.
  7. 选择[编写脚本和数据类型]项的“架构和数据".
  8. 保存脚本,在低版本的数据库下执行脚本即可.

1.3. 第二种:大数据的情况

按理应该也可以通过类似包含架构和数据的方式来做,但是由于包含大数据的时候脚本文件太大,无法在分析器里执行,所以我们得绕一下.
  1. 1~4步和小数据情况相同.
  2. 这步我们选择”高级“,选项里选择[编写DROP和Create脚本]项的”编写DROP和Create脚本“,以及[为服务器版本编写脚本] sql server 2008(具体看数据库的版本),最后选[编写脚本和数据类型]项的“架构".
  3. 保存脚本.
  4. 在低版本的数据下执行脚本,注意(ALTER TABLE 表名 WITH CHECK ADD CONSTRAINT [外键名] FOREIGN KEY(字段)REFERENCES表名(字段))这个先不要执行.
  5. 现在可以通过导入导出任务先将表的内容导入到低版本的数据库内.
  6. 再执行脚本内(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