最近刚刚开始学习sql server 2005。感觉和2000有很大不同。我的问题是,如果我原来的数据库服务器是2000的,备份数据库后删除2000,安装成2005的。然后恢复数据库并新建了一个schema(比如aaa)原来的对象全部搬到新的schema中。但我的应用程序中全部都是不加schema的。如果一个个加上schema,也太麻烦了。有什么办法不用改动应用程序来实现呀?

解决方案 »

  1.   

    架构名用dbo,连接的时候用SA账号来连接就可以不加架构名了。
      

  2.   

    修改表所有者为dbo 
    EXEC   sp_MSforeachtable   'exec   sp_changeobjectowner   ''?'', ''dbo''' 
      

  3.   

    修改表所有者为dbo 
    EXEC   sp_MSforeachtable   'exec   sp_changeobjectowner   ''?'', ''dbo''' 
      

  4.   

    ---转---
    /**
    《把 Schema 都转为 dbo》SQL 2005 引入了 Schema 的概念,让 DBA 在管理 DB 对象时方便了很多。在 
    SQL 2000 的时代,当 user create table 时, user 就是 table 的 owner,
    问题来了,如果这个 user 离职了,要把该 user 名下的 table 转移到别人的
    名下十分麻烦,而且这样的困扰会经常出现,因此很多 DBA 索性将所有的 
    table 或对象都用 dbo 来建立,可是在安全性上又会出现问题。 
    Schema 的概念与机制在 Oracle 里很早就有了,SQL 2005 算是顺应潮流吧。虽
    然更改对象所属的 Schema 很容易,但是如果一次要更改很多的话也是有点麻烦
    ,我刚好碰到了这样的情形,客户从主机端利用工具把资料转到 SQL 2005,但
    是Schema 不是 dbo,希望我们做个修正,一个 table 一个 table 改挺花时间的。
    **/
    --T_SQL: declare @table_name   varchar(50)
           ,@schema_id    int
           ,@schema_name  varchar(50)
           ,@sql_cmd      nvarchar(255)declare table_cursor cursor for
    select name, schema_id
      from sys.tables
     where schema_id <> 1 -- dbo 的 schema_id = 1
     order by nameopen table_cursorfetch next from table_cursor into @table_name, @schema_idwhile @@fetch_status = 0
    begin
       print ''   select @schema_name = name
         from sys.schemas
        where schema_id = @schema_id   select @sql_cmd = 'alter schema dbo transfer ' + @schema_name + '.' + @table_name   print @sql_cmd
       exec sp_executesql @sql_cmd   fetch next from table_cursor into @table_name, @schema_id
    endclose table_cursor
    deallocate table_cursor
    go/**
    这个范例就是把所有非 dbo 名下的 table 都转给 dbo,每个 database 都有一
    些固定的 Schema,例如 dbo,而 dbo 的 schema_id 固定为 1,所以只要找出
    每个 table 所属的 Schema,搭配 Alter Schema 的语法就可以了,当然,配合 
    cursor 的写法,一次搞定。 
    **/ 
      

  5.   

    exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''--修改所有用户创建的对象所有者为dbo
      

  6.   

    谢谢大家的回答。我想我应该解决这个问题了。
    其实很简单,就是把连接数据库的用户的默认架构改成这个要应用的架构就可以了(当然,这个用户首先要有这个架构的权限)。这样,每次写sql时就不用每次加上架构名字了