senyi
 

在你所需要修改存储过程的数据库里添加如下存储过程,可以直接在查询分析器里运行

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

运行后,再调用此存储过程来修改
exec Changename \'olddbo\',\'dbo\' --将olddbo所有者更改为dbo

分类:

技术点:

相关文章: