俩个数据库A and B,用B数据库中的视图比较A数据库中的视图,B数据库中有而A数据库中没有的视图,
则拷贝B中的视图到A中,请问,这个过程可不可以用sql语句来实现,谢谢!另外,视图是不是存在表里面的,如果是,存在哪个表里面?

解决方案 »

  1.   

    就像是job的话,是存储在MSDB里面的
      

  2.   

    SELECT NAME FROM A..SYSOBJECTS T WHERE XTYPE='V'
    WHERE NOT EXISTS(SELECT 1 FROM B..SYSOBJECTS WHERE XTYPE='V' AND NAME=T.NAME)
    SELECT NAME FROM B..SYSOBJECTS T WHERE XTYPE='V'
    WHERE NOT EXISTS(SELECT 1 FROM A..SYSOBJECTS WHERE XTYPE='V' AND NAME=T.NAME)只能帮你查出来哪些没有
      

  3.   

     select b.name,a.text from syscomments a
     join sysobjects b on b.id=a.id 看一下 
      

  4.   

    select b.name,a.text from syscomments a
     join sysobjects b on b.id=a.id and b.xtype='v'
      

  5.   

    SELECT * FROM INFORMATION_SCHEMA.VIEWS
      

  6.   

    SELECT NAME FROM A..SYSOBJECTS T WHERE XTYPE='V'
    AND NOT EXISTS(SELECT 1 FROM B..SYSOBJECTS WHERE XTYPE='V' AND NAME=T.NAME)
    SELECT NAME FROM B..SYSOBJECTS T WHERE XTYPE='V'
    AND NOT EXISTS(SELECT 1 FROM A..SYSOBJECTS WHERE XTYPE='V' AND NAME=T.NAME)晕,修改下,条件弄错,这样是帮你查出来哪些视图各自不存在
      

  7.   

    视图是一个虚拟表。与真实表相比,视图同样包含一系列带有名称的列和行数据,但是视图不在数据库中存储这些数据(除非是索引视图),而是在引用视图时由视图定义中的 SELECT 语句动态生成这些数据。
    在 SQL Server 2000 中,视图的元数据存储在 sysobjects 系统表中,定义存储在 syscomments 系统表。而在 SQL Server 2005 中,这些信息可以通过 sys.views 和 sys.sql_modules 目录视图查看。至于 lz 的问题,答案是可以用 t-sql 语句实现——就是通过这些系统表和目录视图构造动态语句实现。-- 以下语句用于返回数据库 a 中存在,而数据库 b 中不存在的视图定义。lz 可以通过这些信息构造动态语句。-- 但是,需要考虑数据库中是否存在视图所引用的表,创建视图的顺序等等。
    select [definition] from [db_a].sys.sql_modules
    where [object_id] in (select [object_id] from [db_a].sys.views 
    where [object_id] not in (select [object_id] from [db_b].sys.views ))
      

  8.   


    B数据库中有而A数据库中没有的视图, 
    则拷贝B中的视图到A中
    SELECT NAME FROM B..SYSOBJECTS T WHERE XTYPE='V'
    AND NOT EXISTS(SELECT 1 FROM A..SYSOBJECTS WHERE XTYPE='V' AND NAME=T.NAME)查找到B数据库中有而A数据库中没有的视图好像有一个工具可以比较2个数据库的工具,不过忘记了,如果需要可以和我联系。
      

  9.   

    找出表后不能插入,提示无法修改列 'text',因为该列是计算列,
    而text就是存储视图语句的,貌似行不通。
      

  10.   

    是由存储的视图定义构造动态语句,而不是直接修改 syscomments 系统表。