2014年11月7日星期五

比较两个数据库的不同

由于正式库与测试库有些改动未能同步修改,导致结构上有不同,安装了数据库比较工具,可是不怎么好用,而且正版需要付费,试用版功能又不全,搜索stackoverflow时发现了这个,感觉简单好用,自己之前怎么就没想到呢。
--比较两个数据库的不同
DECLARE @Sourcedb sysname 
DECLARE @Destdb sysname 
DECLARE @SQL varchar(max) 

SELECT @Sourcedb = 'AAA' 
SELECT @Destdb = 'BBB' 

SELECT @SQL = ' SELECT ISNULL(SoSource.name,SoDestination.name) ''Object Name'' ,
                CASE WHEN SoSource.object_id IS NULL THEN SoDestination.type_desc +  '' source库中不存在 -- ' + @Sourcedb + ''' COLLATE database_default 
                     WHEN SoDestination.object_id IS NULL THEN SoSource.type_desc +  '' Destination库中不存在 -- ' + @Destdb + ''' COLLATE database_default 
                     ELSE SoDestination.type_desc + '' 双方一致'' COLLATE database_default END ''Status'' 
                FROM (  SELECT  *
                        FROM ' + @Sourcedb + '.SYS.objects  
                        WHERE   Type_desc not in (''INTERNAL_TABLE'',''SYSTEM_TABLE'',''SERVICE_QUEUE'')) SoSource FULL OUTER JOIN
                     (  SELECT * 
                        FROM    ' + @Destdb + '.SYS.objects  
                        WHERE   Type_desc not in (''INTERNAL_TABLE'',''SYSTEM_TABLE'',''SERVICE_QUEUE'')) SoDestination ON SoSource.name = SoDestination.name COLLATE database_default AND SoSource.type = SoDestination.type COLLATE database_default 
                WHERE   SoSource.object_id IS NULL OR SoDestination.object_id IS NULL
                ORDER BY isnull(SoSource.type,SoDestination.type)' 
EXEC (@Sql)
发现sys.objects表中不包含索引,于是再写了一个查询sys.indexes的,具体需要哪些字段还需要修改。
DECLARE @SQL VARCHAR(max)
DECLARE @ADB sysname
DECLARE @BDB sysname

SET @ADB = 'AAA'
SET @BDB = 'BBB'

SET @SQL = 'SELECT  CASE WHEN A.object_id IS NULL THEN ''' + @BDB + ''' + CONVERT(VARCHAR(100),B.object_id) + ''' ''' + B.name
            WHEN B.object_id IS NULL THEN ''' + @ADB + ''' + CONVERT(VARCHAR(100),A.object_id) + A.name
            ELSE A.name + '''双方一致''' END AS Result
    FROM    ''' + @ADB + '''.SYS.indexes A FULL OUTER JOIN
            ''' + @BDB + '''.SYS.indexes B ON A.name = B.name
    WHERE   A.object_id IS NULL
            OR B.object_id IS NULL'
EXEC (@Sql)

悬浮按钮

需要在一个浏览页面添加编辑的按钮,看了下页面,有点长,右侧比较空,所以想在页面右侧添加一个悬浮按钮,由于对css不熟,在网上搜了一下,都是特别费事的。自己冷静下来想了想,不就是对上方和右方的相对位置吗,css完全可控制,按钮就用a好了,直接链接到编辑页面去,最省事。
<div style="position: fixed; z-index: 999; right: 15px; top: 150px; ">
</div>
z-index是控制层的,数值越大越靠上,最后div里面加个a就好了,就是这么简单。 
另外发现css中选择器会有选不中的情况,这时带上上层结构就可以了,可能是css之间有冲突。