今天遇到一个问题,就是网站登录后台的时候,出错了,提示找不到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用户和密码之后,在里面配置进去,就可以了。

      

https://blog.51cto.com/yeyao/661288