nf_ChangeObjectOwner 将Sql Server对象的当前拥有者更改成目标拥有者 语法:nf_ChangeObjectOwner [, @current_Owner = ] "owner",[,@target_Owner =] "owner",[ ,@modify_Type=] type 复制代码 代码如下: 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