首页 >数据库 >mysql教程 >mssql2000升级到SQLServer2005数据库中更改数据架构方法

mssql2000升级到SQLServer2005数据库中更改数据架构方法

WBOY
WBOY原创
2016-06-07 17:49:111241浏览

数据库升级到 mssql 2005 了,我对 2005 不熟悉,发现还原 2000 的数据以前的用户名删除不了,报 Microsoft SQL Server错误: 15138。


在网上找到:SQL Server 2005删除用户失败解决方法(15138错误)
Microsoft SQL Server错误: 15138删除对于用户失败,数据库主体在该数据库中拥有架构,无法删除。
删除 对于 用户“*****”失败。 (Microsoft.SqlServer.Smo)

其他信息:

执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

解决方法一

先删除此用户对应的架构,然后在删除对应的用户
步骤

 代码如下 复制代码
1。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 构架,先删除对应的构架
 代码如下 复制代码
1。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 构架,先删除对应的构架
2。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 用户,删除对应的用户
2。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 用户,删除对应的用户

解决方法二

–执行如下SQL语句

ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo;
–然后手动删除就可以了。


在这里又出现构架也删除不了,原因有一个表的构架不是 dbo 了,得改为 dbo 才行。

在数据库testDB中存在架构A及用户A,现将testDB数据库所属的用户由A改为B,同时删除用户A;

架构也由A改为B,删除架构A,操作如下:

1、创建用户B,再创建架构B;

2、将架构A的权限赋给用户B,取消用户A拥有架构A的权限,删除用户A;

3、将数据库的所有属于架构A的对象改为架构B,代码如下:

ALTER SCHEMA [新架构名] TRANSFER 旧架构名.[数据库中的对象表或视图或存储过程]

ALTER SCHEMA [B] TRANSFER A.[对象1]

ALTER SCHEMA [B] TRANSFER A.[对象2]

ALTER SCHEMA [B] TRANSFER A.[对象n] 

而当要更改一个数据库中全部的表或存储过程时,用上面的方法是可以实现,但是速度太慢了,所以写了一个存储过程批量修改:

改存储过程:

 代码如下 复制代码
USE [testDemo]
 代码如下 复制代码
USE [testDemo]
--
--ALTER SCHEMA slqwell TRANSFER
create table #t (
 ID   int IDENTITY (1,1)     not null, --创建列ID,并且每次新增一条记录就会加1
    procName  varchar(100), 
)
insert into #t(procName)
select   'dbo.' name   from   sysobjects
where   xtype='P'   and   status>=0
select * from #t
declare @i int
declare @j int
set @j = 1
declare @procName varchar(100)
declare @SchemaTable varchar(200)
while(@j < (@i 1))
begin
select @procName=procName from #t where ID=@j
set @j = @j 1
set @SchemaTable = 'ALTER SCHEMA sqlwell TRANSFER ' @procName
exec (@SchemaTable)
end
drop table #t
--

--ALTER SCHEMA slqwell TRANSFER

create table #t (

 ID   int IDENTITY (1,1)     not null, --创建列ID,并且每次新增一条记录就会加1

    procName  varchar(100), 

)<🎜> insert into #t(procName)<🎜> select   'dbo.' name   from   sysobjects <🎜> where   xtype='P'   and   status>=0 select * from #t declare @i int declare @j int set @j = 1 declare @procName varchar(100) declare @SchemaTable varchar(200) while(@j < (@i 1)) begin  select @procName=procName from #t where ID=@j  set @j = @j 1  set @SchemaTable = 'ALTER SCHEMA sqlwell TRANSFER ' @procName  exec (@SchemaTable) end drop table #t
其中原来的架构为代表dbo,先的为sqlwell 要修改表的架构时,只要修改上面的xtype='P' 为xtype='U' 
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn