视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mssql2000升级到SQLServer2005数据库中更改数据架构方法
2020-11-09 09:59:40 责编:小采
文档


数据库升级到 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 -> 数据库 -> 安全性 -> 构架,先删除对应的构架
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]
--
--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' 

下载本文
显示全文
专题