从虚拟主机的sqlserver服务器上将我的数据库备份下来,然后还原到我的电脑上,运行程序,现在出现“未能找到存储过程”的错误提示,顿时心里一颤,存储过程怎么好好的给丢了呢,马上打开sqlserver2000企业管理器,一查,发现存储过程好好的在那啊,程序怎么找不到了,仔细一看,原来是存储过程的所有者配置不正确,因为我在本机上登陆用户是sa,而虚拟主机商那里给我开的帐户是"laohanmssql",再看下表,它的所有也都是laohanmssql。
如图:
OK,找到错误根源后就好解决了,可以在本机数据库中开一个laohanmssql的帐户,然后设置拥有此库的操作权限,再修改下程序的连接字符串就可以了,不过这个方面比较麻烦,要修改那么多地方,还有一个办法就是批量全部将这些库对象转为dbo,这样比较简单,快速,存储过程如下:
CREATE PROCEDURE ChangeObjectOwner
@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
打开sqlserver2000查询分析器,然后运行laohanmssql.ChangeObjectOwner 'laohanmssql', 'dbo',不到一秒钟,问题解决,呵呵,打开企业管理器窗口,刷新视窗,看下,已经全部改变过来了:
老韩于08.1.4晚