当用sp_adduser 对数据库进行添加用户之后.却出现了此对象 '表名' 无效的现象?

执行这个语句,就可以把当前库的所有表的所有者改为dbo
exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''

批量修改:将所有属于 www_domain_com 的表换成 dbo
EXEC sp_MSforeachtable 'exec sp_changeobjectowner ''www_domain_com'',''dbo'' '

单个修改:
exec sp_changeobjectowner '要改的表名','dbo'

在企业管理器里.选择该表----->设计表------>在相当属性里可以更改表的所有者(变为dbo)

--如果是要用户表/存储过程/视图/触发器/自定义函数一齐改,则用游标(不要理会错误提示)

declare tb cursor local for

select 'sp_changeobjectowner ''['+replace(user_name(uid),']',']]')+'].['

+replace(name,']',']]')+']'',''dbo'''

from sysobjects

where xtype in('U','V','P','TR','FN','IF','TF') and status>=0

open tb

declare @s nvarchar(4000)

fetch tb into @s

while @@fetch_status=0

begin

exec(@s)

fetch tb into @s

end

close tb

deallocate tb

go

1. sp_changeobjectowner

更改当前数据库中对象的所有者。

语法

sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'

参数

[@objname =] 'object'

当前数据库中现有的表、视图或存储过程的名称。object 的数据类型为 nvarchar(517),没有默认值。object 可用现有对象所有者限定,格式为 existing_owner.object。

[@newowner =] 'owner'

即将成为对象的新所有者的安全帐户的名称。owner 的数据类型为 sysname,没有默认值。owner 必须是当前数据库中有效的 Microsoft? SQL Server? 用户或角色或 Microsoft Windows NT? 用户或组。指定 Windows NT 用户或组时,请指定 Windows NT 用户或组在数据库中已知的名称(用 sp_grantdbaccess 添加)。

返回代码值

0(成功)或 1(失败)

注释

对象所有者(或拥有对象的组或角色的成员)对对象有特殊的权限。对象所有者可以执行任何与对象有关的 Transact-SQL 语句(例如 Insert、Update、Delete、Select 或 EXECUTE),也可以管理对象的权限。

如果拥有对象的安全帐户必须要除去,但同时要保留该对象,请使用 sp_changeobjectowner 更改对象所有者。该过程从对象中删除所有现有权限。在运行 sp_changeobjectowner 之后,需要重新应用要保留的任何权限。

由于这个原因,建议在运行 sp_changeobjectowner 之前,编写现有权限的脚本。一旦更改了对象的所有权,可能要使用该脚本重新应用权限。在运行该脚本之前需要在权限脚本中修改对象所有者。有关编写数据库脚本的更多信息,请参见编写数据库文档和脚本。

可以使用 sp_changedbowner 更改数据库的所有者。

权限

只有 sysadmin 固定服务器角色和 db_owner 固定数据库角色成员,或既是 db_ddladmin 固定数据库角色又是 db_securityadmin 固定数据库角色的成员,才能执行 sp_changeobjectowner。

示例

下面的示例将 authors 表的所有者改为 Corporate/GeorgeW。

EXEC sp_changeobjectowner 'authors', 'Corporate/GeorgeW'

请参见

改变数据库所有者:sp_changedbowner

------------------------------以上摘自sql server 的联机丛书

注意:

使用sqlserver2000改变对象(object)(如Table,SP,View)的所有者(owner)时,需要注意一点:

如果对象改变前的owner为dbo,则直接用:exec sp_changeobjectowner 对象名,新的所有者名就可以成功。如果再需要改变该对象的所有者,则要用如下语法:

exec sp_changeobjectowner "[所有者].[对象名]",新的所有者。注意,双引号不可省略,否则提示objectname does not exist。

EXEC sp_changeobjectowner 'cqadmin.authors', 111

2.建与原表结构相同表,然后把数据从原表插入到新表,操作方法:

在sql server企业管理器中选择原表点右键,选择“所有任务/生存SQL脚本”,保存生成的脚本,在脚本中把表的原所有者改成新所有者。然后再把该脚本运行一遍,数据库中就新生成了一个表,所有者是新所有者,原来的表还在数据库中没有被替换。新表和旧表 表名相同,所有者不同,此时的新表中没有数据。

然后再运行下面的语句往新表中插入数据:

Insert INTO CQAdmin.m_actiondef //新所有者.新表名

Select *

FROM RegaltecDefSchema. CQAdministrator.m_actiondef // 数据库名.旧所有者.旧表名

运行完了就做完了,可以把旧表删掉,也可以留着。

SQLServer修改表所有者的更多相关文章

  1. SQLServer修改表数据

    使用SSMS数据库管理工具修改数据 修改任意一条或者多条都可以 1:打开数据库,选择数据表,右键点击->编辑所有行(如未配置,点击编辑前200行). 2.编辑需要修改的数据->编辑完成后, ...

  2. SQLServer修改表名、修改列名

    基本语法 修改表名:EXEC sp_rename ‘原有表名’, '新表名'; 修改列名:EXEC sp_rename ‘表名.[原有列名]’, ‘新列名' , 'COLUMN'; EXEC sp_r ...

  3. SQL Server 2008 修改表所有者,架构

    ALTER SCHEMA 新架构 TRANSFER 旧架构.对象名称

  4. sqlserver修改表主键自增

    alter table tname add id int  identity(1,1)

  5. sqlserver 修改数据库表所有者

    SQLServer修改表所有者  来自:http://www.cnblogs.com/tearer/archive/2012/09/16/2687802.html 批量修改:EXEC sp_MSfor ...

  6. SQLServer Alter 修改表的列名的解决

    解决:在SQLServer中修改表的列名,可以调用存储过程sp_rename. [sql]use Test;--使用数据库  sp_rename 'd_s_t.avg_grade','avg_g',' ...

  7. sqlserver通过设计器修改表结构保存时提示:保存到文本问题

    在sqlserver通过设计器修改表结构后保存时提示:保存到文本问题,这个问题可能通过修改设置项解决 工具>选项>设计器>   在弹出的窗口是把“阻止保存要求重新创建表的更改”选项的 ...

  8. sqlserver和oracle修改表结构

    sqlserver和oracle修改表结构常用SQL Server:1.增加列  ALTER TABLE users ADD address varchar(30);2.删除列  ALTER TABL ...

  9. sqlserver 2008表分区操作

    表分区操作步骤 1.设计表进行分区的方案,水平分区.垂直分区 a.水平切割将减少表的行数,这样可以将历史数据归档,减少表大小,提高访问速度. b.垂直切割将分为主表和从表方式,将主要的列字段存放在主表 ...

随机推荐

  1. JSP九大内置对象的作用和用法总结?

    JSP九大内置对象的作用和用法总结? 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTT ...

  2. js 小技巧

    如果想让js每次加载时,都要执行, 那么在 <script type="text/javascript" >中加一个属性reload="1", &l ...

  3. Java(六)——抽奖系统

     总体思路: 将编号加入ArrayList动态数组中,利用集合的静态方法Collections.shuffle() 乱序集合中的元素从而获得随机数,remove删除已抽编号  代码如下: import ...

  4. ubuntu samba 服务器设置

    安装 SAMBA 组件 sudo apt-get install samba smbfs smbclient ubuntu 14.04 使用以下方式安装: ? 1 2 3 4 5 6 7 若之前有安装 ...

  5. hibernate中获得session的方式

    his.getsession实际上是调用了父类中的方法获得session.使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session ...

  6. Day25_多线程第二天

    1.单例); } 4.线程之间的通信(多个线程共享同一数据的问题) ; public void print1() throws InterruptedException { synchronized( ...

  7. maven打包不执行测试用例

    在执行maven打包时不需要执行测试用例,使用如下2种方式实现:-DskipTests=true : 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下 ...

  8. mac上使用imagealpha命令对图片进行压缩批处理

    #! /bin/bash #BASE_DIR="/Users/jiading/Documents/basepng"; #OUTPUT_DIR="/Users/jiadin ...

  9. C语言的作用域规则

    作用域规则 程序中名字的作用域,通俗的讲,就是这个名字在程序中的使用范围.在C语言中,作用域的规则相对比较简单,主要分为 全局作用域 和 局部作用域 两种. 一个变量如果定义在函数中,那么这个变量的作 ...

  10. Sep14学习笔记_pipe() & fork()

    第一次用博客园,昨晚编辑器一直没打开,今天打开了,把昨天的内容先补一下 关于parent和child之间的数据传输: If the parent wants to receive data from ...