当前位置:
  1. 魔豆IT网
  2. 系统教程
  3. SqlServer
  4. 正文

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'

可直接更改当前数据库的所有者

相关阅读

  • 暂无推荐

《》由网友“”推荐。

转载请注明: