批量修改SQLSERVER2005中对象的所属架构方法

 SQL2005使用起来真是比SQL2000难于上手,登陆名,用户,架构,角色,权限,反反复复的,没弄清这个关系.

 

      以前在服务器上的数据库使用远程连接SQL2000创建的存储过程,现在下载到本地,所有当时的存储过程所有者都不是dbo,而安全用户里有dbo,默认架构也是dbo,登陆名是sa,dbo具有dbowner的权限,原以为这样以sa创建adodb连接对象的话,是可以操作数据库的所有对象的,没想到在执行到以前的存储过程时提示:
      Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'

 

      [Microsoft][ODBC SQL Server Driver][SQL Server]找不到存储过程 'Proc_WebCount'。

 

      
      一下子胡涂了一阵,默认sa就是dbowner权限的,怎么会没有执行权限呢,反复设置dbo权限,架构,还有原来的所有者架构,权限帐号,怎么也不能把现在的所有者与dbo联系起来.

 

      最后查了点资料,终于找到修改数据库中各个对象所有者的方法,修改了一下,直接执行就可以用,挺方便..

 

      
       以SA登陆,USE要选择的数据库,再执行下面的SQL语句:
      --创建游标,查询所有者为NiunvDB的记录
      declare csr1 cursor
      for
      select 'Name' = name
      from sysobjects
      where user_name(uid)='NiunvDB'
      order by name
      open csr1

 

      --循环读取游标记录,执行系统存储过程SP_ChangeObjectOwner修改对象所有者
      FETCH NEXT FROM csr1 INTO @name
      while (@@FETCH_STATUS=0)
      BEGIN
      SET @name='NiunvDB.'+@name
      EXEC SP_ChangeObjectOwner @name, 'dbo'
      fetch next from csr1 into @name
      END
      CLOSE csr1
      DEALLOCATE csr1

 

      执行以后可以看到
      告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
      ......

 

      就是符合查询条件的全部对象的所有者被改了希望的所有者名称了.然后刷新数据库对象,可以看到,原来的NiunvDB.开头的存储过程全部变成了dbo.存储过程名了.....

 

       sysobjects表里存储了对应数据库的对象数据,包括表,默认值,主键,存储过程,其中的type字段就表示对象类型,大概意思如下:
      P:存储过程
      U:用户表
      K:主键
      D:默认值
      还有几个类型,想不出来是什么意思,不过这几个应该够用了,要查表的信息,还可以使用
      select * from INFORMATION_SCHEMA.TABLES
      查询出所有对应数据库中的表数据,
      INFORMATION_SCHEMA.columns可查全部表的列数据
      INFORMATION_SCHEMA.VIEWS可查全部视图数据

 

      
      sp_changedbowner 'sa'
      可直接更改当前数据库的所有者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值