【0】无法删除登录名,因为它是对象的所有者
【1】作业所有者
【1.1】作业表与登录名基本信息
(1)查看登录名信息
--登录名表,所有者表 select * from master.dbo.syslogins --角色权限关系表 select * from sys.database_principals
(2)查看作业信息
查询所有作业的表:sysjobs(可以去官网了解文档内容)
select * from msdb.dbo.sysjobs --其中的sid和所有者表里的owner_sid是一致的
【1.2】查看某个登录名下拥有的作业
(1)查询被废弃的所有者号下的所有作业
--可以用这个先查一遍。 select a.*,b.name from ( select * from msdb.dbo.sysjobs where owner_sid<>0x01 ) a left join master.sys.syslogins b on a.owner_sid=b.sid where b.name like '%这里换成将要删除的帐号%'
【1.3】自动化更新所有涉及到的作业的所有者为sa
declare @job_id varchar(300) select a.job_id into #ttt from ( select name,[enabled],owner_sid,job_id from msdb.dbo.sysjobs where owner_sid<>0x01 ) a left join master.sys.syslogins b on a.owner_sid=b.sid where b.name is null or b.name like '%这里换成将要删除的帐号%' while (select count(1) from #ttt)>0 begin select top 1 @job_id=job_id from #ttt order by job_id asc declare @sql varchar(500) select @sql = 'EXEC msdb.dbo.sp_update_job @job_id=N'''+@job_id+''', @owner_login_name=N''sa''' print (@sql) exec (@sql) delete from #ttt where job_id=@job_id end truncate table #ttt drop table #ttt
【2】数据库所有者
【2.1】查看登录名对应拥有的数据库
-- 查看属于带gg字样登录名的数据库
select t2.name,t1.* from sys.databases t1 join master.sys.syslogins t2 on t1.owner_sid=t2.sid where t2.name like '%gg%'
【2.2】自动化更新该登录名下所有数据库的拥有者为sa
-- 修改对应登录名拥有的数据库所有者为sa
declare @sql varchar(max) set @sql='' select @sql=@sql+cast('use '+t1.name+';ALTER AUTHORIZATION ON DATABASE::['+t1.name+'] TO [sa];'+char(13) as varchar(max)) from master.sys.databases t1 join master.sys.syslogins t2 on t1.owner_sid=t2.sid where t2.name like '%gg%' print @sql exec(@sql)