修改SQL2005数据库表中所有者
文章纯属个人体会和实践,如有错误,请转告于我。大家一起研究一下!
今天遇到一个问题,就是网站登录后台的时候,出错了,提示找不到admin表。但是在数据库的表中是能够看到的,只是表名略有不同。
先说说问题吧:
首先,网站是从别的服务器上转到这个服务器上的,我们都知道网站有数据库的,况且这个网站是SQL2005的数据库,也就是传到这个服务器上之后,我们要附加数据库,但是附加完毕之后,也就需要配置数据库。
然后我们需要进行新建这个数据库的账号和密码,但是默认原本数据库里面的账号就必须得删除,但是就在删除的时候,出错了!说是用户在架构中存在,我们大家都知道用户默认新建之后会出现在数据库的架构里面,所以要删除此用户,必须先要到架构里面删掉这个用户的架构。
但是,可惜的是在删除的时候,又出现了错误,也就是数据库的架构在admin的表中已经使用,也就是我在本文开始前的一句话,表名变了,默认的表名一般为dbo_admin ,但是此时的表名为用户名加admin,例如:“51cto_admin”就像这种格式。
所以,情况恶劣了,就是架构也删不掉,就意味着用户删不掉,也意味着现在的表也不能使用。理所当然的是先要修改表名。但是,表有很多,批量修改表名的命令是有,但是要与储存过程一起使用。
首当其冲的当然是要新建一个储存过程,但是百度不给力,搜了半天没有结果,根据公司网建加研发的一些人给经验,然后弄出来了。
解决办法 :
1、 首先在此数据库里面新建查询,直接复制下面的代码到查询窗口里面,点执行就可以了,代码如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[changename]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[changename]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
Create PROCEDURE dbo.changename
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
2、执行完毕之后,也就是存储过程已经建立完毕,然后开始执行,下面的代码,复制之后,修改成你表中的名称,比如我以51CTO_admin为例,代码如下:
exec Changename '51CTO','dbo'
3、执行完这两段代码之后,在刷新一下数据库,此时数据库的表就显示为“dbo_admin”这样才算解决完毕。
其实文章到上面一段已经结束了,不过我还说一下吧!
这个被上传到这个服务器上的网站属于ASP的,所以他的配置文件在admin的conn文件和conn2文件里面配置。所以新建SQL用户和密码之后,在里面配置进去,就可以了。
感谢大家的关注,谢谢!
作者“夕阳≮沧海”
相关新闻>>
- 发表评论
-
- 最新评论 更多>>