您的位置:华夏互联>>数据库知识>>SQL存储过程因为选定的用户拥有对象XX而无法删除的有效解决办法

SQL存储过程因为选定的用户拥有对象XX而无法删除的有效解决办法

作者: 来源: 发布时间:2009-05-20 点击数:

步骤一 :在问题库中建立存储过程

IF OBJECT_ID('ChangeAllObjOwner') IS NOT NULL DROP PROC ChangeAllObjOwner
GO

CREATE PROCEDURE ChangeAllObjOwner (
@oldowner sysname,
@newowner sysname
)
AS
DECLARE @objname sysname
SET NOCOUNT ON

--check that the @oldowner exists in the database
IF USER_ID(@oldowner) IS NULL
BEGIN
RAISERROR ('The @oldowner passed does not exist in the database', 16, 1)
RETURN
END
--check that the @newowner exists in the database
IF USER_ID(@newowner) IS NULL
BEGIN
RAISERROR ('The @newowner passed does not exist in the database', 16, 1)
RETURN
END

DECLARE owner_cursor CURSOR FOR 
SELECT name FROM sysobjects WHERE uid = USER_ID(@oldowner)

OPEN owner_cursor
FETCH NEXT FROM owner_cursor INTO @objname
WHILE (@@fetch_status <> -1)
BEGIN
SET @objname = @oldowner + '.' + @objname
EXEC sp_changeobjectowner @objname, @newowner
FETCH NEXT FROM owner_cursor INTO @objname
END

CLOSE owner_cursor
DEALLOCATE owner_cursor
GO

步骤二:

在查询分析器里执行下列语句:

EXEC ChangeAllObjOwner @oldowner = '原先的用户名', @newowner = '新的用户名'

责任编辑: 发表评论>>