成批更改sql server数据库所有者的对象


  由于一些网站是 使用 虚构主机.用sql-server导数据上去的话.
  数据库的消费者默许是你登录的消费者,不是dbo,有时就和当地产生不 统一.

  -- 性能 注明:成批更改数据库全部者的对象
  --作者:不详
  --用法:exec ChangeObjectOwner 'nmkspro','dbo'
  --即可将全部nmkspro全部者的对象改为dbo全部
  --运行 顺利后将 揭示:" 留神: 更改对象名的任一 部分都可能 毁坏脚本和存储过程 。"
  CREATE PROCEDURE dbo.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

  批量 批改:
  EXEC sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''dbo'' '
  单个 批改:
  exec sp_changeobjectowner '要改的表名','dbo'

   步骤一:直接点击该表-》设计-》属性-》更改上面的全部者 。该 步骤针关于表少的状况下 。
   步骤二:利用脚本直接执行,用系统帐号或者超户登陆到该数据库, 而后执行下面语句:
  sp_configure 'allow updates','1'
  go
  reconfigure with override
  go
  update sysobjects set uid=1 where uid<>1 --依据条件 可以任意 批改,在多消费者中间切换 。
  go
  sp_configure 'allow updates','0'
  go
  reconfigure with override