解决方案 »

  1.   

    有现成的http://www.codeproject.com/Articles/145979/SQL-Server-Schema-Comparison-Tool-in-Visual-Studio http://stackoverflow.com/questions/685053/what-is-best-tool-to-compare-two-sql-server-databases-schema-and-data 
      

  2.   

    表结构这样?
    DataTable dt=xxx.sql("select * from abc");
                foreach (DataColumn dc in dt.Columns)
                {
                    Response.Write(string.Format("列名:{0} ,数据类型:{1}" ,dc.ColumnName, dc.DataType));
                }
      

  3.   

    并不是所有的差异都可以在线被更新过来。换言之,这种程序不能保证不丢失数据和执行的操作是可逆的。所以这种工具在技术上就不可能实现。如果你根本不在乎这一点,那也不需要比较了,直接drop掉一切重新建库好了。
      

  4.   

    那不行有的数据还是必须得要的!不能完全把数据删除干净比如说修改主键这件事情,就不能保证一定能成功。你根本就不应该指望有一个程序可以做到这一点。
    也就是说,如果有这种需求的话就只能手动写SQL做了对吧?这样也挺麻烦的,我得先找哪些有差别再写出SQL再执行。
      

  5.   

    那不行有的数据还是必须得要的!不能完全把数据删除干净比如说修改主键这件事情,就不能保证一定能成功。你根本就不应该指望有一个程序可以做到这一点。
    也就是说,如果有这种需求的话就只能手动写SQL做了对吧?这样也挺麻烦的,我得先找哪些有差别再写出SQL再执行。找出差别容易得很。数据库迁移不是那么简单的了,有时候手动写sql也不一定可以,要自己规划,可能要导入导出数据,要做好预案。万一失败,怎么处理,遇到冲突怎么解决。这是dba干的活。
      

  6.   

    那不行有的数据还是必须得要的!不能完全把数据删除干净比如说修改主键这件事情,就不能保证一定能成功。你根本就不应该指望有一个程序可以做到这一点。
    也就是说,如果有这种需求的话就只能手动写SQL做了对吧?这样也挺麻烦的,我得先找哪些有差别再写出SQL再执行。找出差别容易得很。数据库迁移不是那么简单的了,有时候手动写sql也不一定可以,要自己规划,可能要导入导出数据,要做好预案。万一失败,怎么处理,遇到冲突怎么解决。这是dba干的活。前辈:如果我们现在没有DBA,但是想实现在程序中升级一个数据库,从旧版本升级到新版本,这个您能提供些建议吗?
      

  7.   

    --查询外键
    select b.name FK_Name,c.name ForeignTable,d.name ForeignCol,e.name refTable,f.name refCol
    from sysforeignkeys a
    inner join sysobjects b  on a.constid=b.id
    inner join sysobjects c  on a.fkeyid=c.id
    inner join syscolumns d on a.fkeyid=d.id and a.fkey=d.colid
    inner join sysobjects e  on a.rkeyid=e.id
    inner join syscolumns f on a.rkeyid=f.id and a.rkey=f.colid
    --查询表名与字段名
    select a.name as 表名,b.name as 字段名
    from sysobjects a
    left join syscolumns b on a.id=b.id
    where a.xtype='U'
    order by a.name,b.name
      

  8.   

    1楼的方法是不是只能对比sql与sql之间区别,我以前做过数据库对比(支持sql与sql,oracle-oracl,sql-oracl)但是没做过更新。我感觉像上面大神说的这个应该