if exists (select * from sysobjects where id = object_id(N'[nf_ChangeObjectOwner]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure nf_ChangeObjectOwner GO
Create PROCEDURE nf_ChangeObjectOwner @current_Owner nvarchar(255), @target_Owner nvarchar(255), @modify_Type int /***********************************************************************************************
@Write by Net Fetch. @At 2005/09/12 @Email: cnNetFetch*Gmail.Com blog.ad0.cn
************************************************************************************************/ AS DECLARE @str_Tbl_Name nvarchar(255),@object_Num int,@current_Owner_uid smallint Set @object_Num = 0 DECLARE @return_status int Set @return_status = -1 Set @current_Owner_uid = (Select uid From sysusers Where [Name] = @current_Owner) If Not (Len(@current_Owner_uid)>0) RETURN -1 If (@modify_Type = 1) DECLARE ChangeObjectOwner_Cursor CURSOR FOR Select [Name] From sysobjects Where (type='U' or type='V' or type='P') and userstat=0 and [Name]<>'nf_ChangeObjectOwner' and status>-1 and uid = @current_Owner_uid Else DECLARE ChangeObjectOwner_Cursor CURSOR FOR Select [Name] From sysobjects Where (type='U' or type='V' or type='P') and userstat<>0 and [Name]<>'dtproperties' and uid = @current_Owner_uid OPEN ChangeObjectOwner_Cursor BEGIN TRANSACTION Change_ObjectOwner FETCH NEXT FROM ChangeObjectOwner_Cursor INTO @str_Tbl_Name WHILE (@@FETCH_STATUS = 0) BEGIN Set @str_Tbl_Name = @current_Owner + '.' + @str_Tbl_Name Print @str_Tbl_Name EXEC @return_status = sp_changeobjectowner @str_Tbl_Name, @target_Owner IF (@return_status <> 0) BEGIN ROLLBACK TRANSACTION Change_ObjectOwner RETURN -2 END Set @object_Num = @object_Num + 1 FETCH NEXT FROM ChangeObjectOwner_Cursor INTO @str_Tbl_Name END Print @object_Num COMMIT TRANSACTION Change_ObjectOwner CLOSE ChangeObjectOwner_Cursor DEALLOCATE ChangeObjectOwner_Cursor