当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server新库和旧库数据字典的比较

MSSQL
最簡便的備份MySql資料庫方法
MS SQL 数据库备份和还原的几种方法
深入浅出SQL系列教程之SQL语言简介
Asp备份与恢复SQL Server
实战MSSQL 2000数据库之MSSQL Server安装
五种提高SQL Server性能的方法
SQL Server数据库备份和恢复措施
INSERT语法使用技巧一例
sql注入防范方法
操作数据库结构Sql语句
精妙SQL语句介绍
SQL Server常见连接错误
SQL如何备份并压缩备份文件?
Access数据库升迁SQLServer
SQL Server中如何计算农历
SQL SERVER Agent服务使用技巧小结
SQL SERVER使用嵌套触发器
“SQL Server不存在或访问被拒绝”问题的解决
SQL Server 管理常用的SQL和T-SQL(二)
谈SQL Server 2005中的T-SQL增强

MSSQL 中的 SQL Server新库和旧库数据字典的比较


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 52 ::
收藏到网摘: n/a

阅读本文前我们首先需要了解新库和旧库一定要在同一个数据库服务器的同一实例中,您最好以sa的身份来登陆,下面的这个实例脚本可以用于用于您的系统升级改造,在得到相关信息后来作数据的迁移。

declare @i int

set @i=4
 

/*3:1是需要得到新库增加的数据字典信息。

2是需要得到旧库多出的数据字典信息。

3是需要得到新库增加的表的数据字典信息。

4是需要得到旧库多出的表的数据字典信息*/

use temp  --打开旧库
SELECT sysobjects.name AS [table], CASE WHEN CAST(sysproperties.[value] AS varchar)
IS NULL THEN '' ELSE CAST(sysproperties.[value] AS varchar) END AS 表说明,
syscolumns.name AS field, CASE WHEN CAST(properties.[value] AS varchar) IS NULL
THEN '' ELSE CAST(properties.[value] AS varchar) END AS 字段说明,
systypes.name AS type, syscolumns.length,
ISNULL(COLUMNPROPERTY(syscolumns.id, syscolumns.name, 'Scale'), 0)
AS 小数位数, syscolumns.isnullable AS isnull,
CASE WHEN syscomments.text IS NULL
THEN '' ELSE syscomments.text END AS [Default],
CASE WHEN COLUMNPROPERTY(syscolumns.id, syscolumns.name, 'IsIdentity')
= 1 THEN '√' ELSE '' END AS 标识, CASE WHEN EXISTS
(SELECT 1
FROM sysobjects
WHERE xtype = 'PK' AND name IN
(SELECT name
FROM sysindexes
WHERE indid IN
(SELECT indid
FROM sysindexkeys
WHERE id = syscolumns.id AND colid = syscolumns.colid)))
THEN '√' ELSE '' END AS 主键 into #old
FROM syscolumns INNER JOIN
sysobjects ON sysobjects.id = syscolumns.id INNER JOIN
systypes ON syscolumns.xtype = systypes.xtype LEFT OUTER JOIN
sysproperties properties ON syscolumns.id = properties.id AND
syscolumns.colid = properties.smallid LEFT OUTER JOIN
sysproperties ON sysobjects.id = sysproperties.id AND
sysproperties.smallid = 0 LEFT OUTER JOIN
syscomments ON syscolumns.cdefault = syscomments.id
WHERE (sysobjects.xtype = 'U')

use accdb --打开新库
SELECT sysobjects.name AS [table], CASE WHEN CAST(sysproperties.[value] AS varchar)
IS NULL THEN '' ELSE CAST(sysproperties.[value] AS varchar) END AS 表说明,
syscolumns.name AS field, CASE WHEN CAST(properties.[value] AS varchar) IS NULL
THEN '' ELSE CAST(properties.[value] AS varchar) END AS 字段说明,
systypes.name AS type, syscolumns.length,
ISNULL(COLUMNPROPERTY(syscolumns.id, syscolumns.name, 'Scale'), 0)
AS 小数位数, syscolumns.isnullable AS isnull,
CASE WHEN syscomments.text IS NULL
THEN '' ELSE syscomments.text END AS [Default],
CASE WHEN COLUMNPROPERTY(syscolumns.id, syscolumns.name, 'IsIdentity')
= 1 THEN '√' ELSE '' END AS 标识, CASE WHEN EXISTS
(SELECT 1
FROM sysobjects
WHERE xtype = 'PK' AND name IN
(SELECT name
FROM sysindexes
WHERE indid IN
(SELECT indid
FROM sysindexkeys
WHERE id = syscolumns.id AND colid = syscolumns.colid)))
THEN '√' ELSE '' END AS 主键 into #new
FROM syscolumns INNER JOIN
sysobjects ON sysobjects.id = syscolumns.id INNER JOIN
systypes ON syscolumns.xtype = systypes.xtype LEFT OUTER JOIN
sysproperties properties ON syscolumns.id = properties.id AND
syscolumns.colid = properties.smallid LEFT OUTER JOIN
sysproperties ON sysobjects.id = sysproperties.id AND
sysproperties.smallid = 0 LEFT OUTER JOIN
syscomments ON syscolumns.cdefault = syscomments.id
WHERE (sysobjects.xtype = 'U') 


if @i=1
begin
select n.* --新库与旧库相比较后新库增加的数据字典信息
from #new n left join #old o on n.[table]=o.[table] and n.field=o.field where o.[table] is null
or o.field is null order by n.[table],n.field
end
else
begin
if @i=2
begin
select o.* --新库与旧库相比较后旧库多出的数据字典信息
from #new n right join #old o on n.[table]=o.[table] and n.field=o.field where n.[table] is null
or n.field is null order by o.[table],o.field
end
else
begin
if @i=3
begin
select * --新库与旧库相比较后新库增加的表的数据字典信息
from #new where [table] <> all(select [table] from #old ) order by [table],field
end
else
begin
if @i=4
begin
select * --新库与旧库相比较后旧库多出的表的数据字典信息
from #old where [table] <> all(select [table] from #new ) order by [table],field
end
else
begin
select '出错啦'
end    
end    
end   
end

drop table #old
drop table #new