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

在网上找到: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' 

时间: 2024-09-27 02:16:17

mssql2000升级到SQLServer2005数据库中更改数据架构方法的相关文章

使用JDBC从数据库中查询数据的方法_Mysql

* ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回的实际上就是一张数据表,有一个指针指向数据表的第一行的前面, * 可以调用next()方法检测下一行是否有效,若有效,返回true,且指针下移, * 相当于iterator 对象的 hasNext() 和 next()方法的结合体 * 3. 当指针定位到一行时,可以通过调用getXxx(index)

php从数据库中读取数据实现方法

先看段代码  代码如下 复制代码 <?php session_start(); $con=mysql_connect('localhost','root','root') or die('链接数据库失败!'); mysql_query('set names utf8'); mysql_select_db('GuestBook'); $pagesize = 10;//每一页显示多少留言记录 if(isset($_GET['page'])&&$_GET['page']!='') $pag

java更改数据库中的数据

不废话,上代码   1 package com.ningmeng; 2 3 import java.sql.*; 4 5 /** 6 * 1:更改数据库中的数据 7 * @author biexiansheng 8 * 9 */ 10 public class Test04 { 11 12 public static void main(String[] args) { 13 // TODO Auto-generated method stub 14 try { 15 Class.forName

《R语言数据分析》——1.4 从数据库中导入数据

1.4 从数据库中导入数据 使用一个专用的数据库测试平台比根据需要从磁盘中导入文件效率要高很多,这是由数据库本身特性决定的: 对大数据表的访问速度更快 在数据导入R前,提供了更快更有效的数据聚集和筛选方法 相比电子表格以及R对象实现的传统矩阵模型,能够提供更加结构化的关系 数据模型来存储数据 提供对数据的连接及合并操作 在同一时间支持对多个客户端的并发远程访问 提供了安全和有限的访问 提供可扩展及可配置的数据存储后台 DBI包提供了数据库操作的接口,可以作为R和不同关系数据管理系统(Relati

MySQL数据库中部分数据损坏恢复过程

前几天因为MySQL数据库部分数据损坏原因,我尝试了下恢复数据,之后整理以下文档,供各位参考,以备各位同事以后如有类似问题,可以少走些弯路,尽快解决问题. 环境:Windows2003 数据库:MySQL 损坏数据文件名:function_products 将数据库内容物理文件直接导入到mysql\data下,每只表各3个文件,依次分别为:.frm .myd .myi.首先我第一想到的是去网上搜索,寻找类似的工具,试图通过工具来恢复已损坏的文件,于是我在google上查找,找到一款名为mysql

c#-C#中怎么在datagridview里面直接修改数据库中的数据

问题描述 C#中怎么在datagridview里面直接修改数据库中的数据 C#中怎么在datagridview里面直接修改数据库中的数据 解决方案 这个要看你是怎取的数据,如果是在系统里面直接通过配置dataset出来的,你可以直接配下dataset里的update方法,dataGridView更改后用AcceptChanges,就能更新了!如果查询那些是自己写的,就得自己写Update方法. 解决方案二: C#中怎么在datagridview里面直接修改数据库中的数据 直接修改数据库的内容比较

从数据库中取得数据,复选框中与之相等则选中

问题描述 从数据库中取得数据,复选框中与之相等则选中 从数据库中取得数据,后台返回的值与前台复选框的值一致则复选框默认被选中(使用aashx处理界面) 解决方案 取到数据后 循环你要更改的 复选框,值相同的 就选中 checked 解决方案二: 用js搞就好了..你的ashx是返回数据源的吧,处理界面是什么东东.. <input type="checkbox" name="ck" value="1" />1 <input typ

利用MyEclipse6.0怎样对数据库中的数据进行修改

问题描述 利用MyEclipse6.0创建的web工程中的servlet和jsp怎样对数据库中的数据进行修改? 解决方案 解决方案二:update你要修改的表set你要修改的数据列=你要修改的数据列的值where你要修改数据列的约束条件例如UPDATE[tamakinami].[dbo].[produce]SET[customeraddress]=<customeraddress,varchar(50),>,[listdate]=<listdate,varchar(50),>,[g

sqlite删除数据库中的数据时偶尔会出现错误

问题描述 sqlite删除数据库中的数据时偶尔会出现错误 java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed. 求助,connection pool 是啥啊,求大神指教. 解决方案 如果确定不是连接被关闭,那还有可能就是多线程访问sqlite,sqlite数据库是单线程操作的,那么当N多个Thread同时调用的时候,可能报这错误.这也就