数据库搬迁时,太多的Login和User需要匹配,过于麻烦,特意写了这个脚本,每次搬迁数据库只需跑下脚本匹配Login和User即可。

USE [msdb]
GO

/****** Object:  StoredProcedure [dbo].[usp_AUTO_FIX_Login_Users]    Script Date: 6/14/2013 2:06:32 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:  <SDS>
-- Create date: 2013/06/14
-- Description: 匹配Login和Users
-- =============================================
CREATE PROCEDURE [dbo].[usp_AUTO_FIX_Login_Users]
AS
BEGIN
 SET NOCOUNT ON;

IF EXISTS (SELECT  * FROM  SYSOBJECTS WHERE ID = OBJECT_ID('dbo.databases') and XTYPE = 'U')
 DROP TABLE dbo.databases

IF EXISTS (SELECT  * FROM  SYSOBJECTS WHERE ID = OBJECT_ID('dbo.login') and XTYPE = 'U')
 DROP TABLE dbo.login

IF EXISTS (SELECT  * FROM  SYSOBJECTS WHERE ID = OBJECT_ID('dbo.users') and XTYPE = 'U')
 DROP TABLE dbo.users

IF EXISTS (SELECT  * FROM  SYSOBJECTS WHERE ID = OBJECT_ID('dbo.Result') and XTYPE = 'U')
 DROP TABLE dbo.Result

CREATE TABLE [dbo].[databases]([number] [int] NULL,[name] [nvarchar](50) NULL) ON [PRIMARY]
 CREATE TABLE [dbo].[login]([number] [int] NULL,[name] [nvarchar](50) NULL) ON [PRIMARY]
 CREATE TABLE [dbo].[users]([number] [int] NULL,[name] [nvarchar](50) NULL) ON [PRIMARY]
 CREATE TABLE [dbo].[Result]([Database][nvarchar](50) NULL,[Login] [nvarchar](50) NULL) ON [PRIMARY]

DECLARE @l int
 DECLARE @d int
 DECLARE @lnumber int
 DECLARE @dnumber int
 declare @login as nvarchar(50)
 declare @databasename as nvarchar(50)
 declare @strsql1 as nvarchar(max)
 declare @strsql2 as nvarchar(max)
 declare @strsql3 as nvarchar(max)
 declare @strsql as nvarchar(max)
 declare @ROWCOUNT as int

SET @l=1
 SET @d=1
 SET @strsql=''

DELETE FROM dbo.databases
 INSERT INTO dbo.databases
 SELECT ROW_NUMBER() OVER (ORDER BY name ) AS number,name 
 FROM sys.databases
 WHERE state_desc='ONLINE' AND DatabasePropertyEx(name,'Updateability')<>'READ_ONLY'

DELETE FROM dbo.login
 INSERT INTO dbo.login
 SELECT ROW_NUMBER() OVER (ORDER BY name ) AS number,name
 from sys.syslogins
 where len(name)<=10

SELECT @dnumber=MAX(number) from dbo.databases
 SELECT @lnumber=MAX(number) from dbo.login

WHILE(@d<=@dnumber)
 BEGIN
  SELECT @databasename=name FROM dbo.databases WHERE number=@d
  SET @strsql1 ='USE '+@databasename+' '
  WHILE (@l<=@lnumber)
  BEGIN
     SELECT @login= name FROM dbo.login WHERE number=@l
     EXEC('DELETE FROM dbo.users INSERT INTO dbo.users SELECT ''1'' as number,name FROM '+@databasename+'.DBO.sysusers where islogin=''1'' AND name='''+@login+''' ')
     SELECT @ROWCOUNT=COUNT(*) FROM dbo.users
     IF @ROWCOUNT>0
     BEGIN     
      INSERT INTO DBO.Result
      SELECT @databasename as [Database],@login as [Login]
      SET @strsql2= @strsql1+' EXEC sp_change_users_login ''AUTO_FIX'','''+@login+''' '
      SET @strsql = @strsql + @strsql2
      PRINT(@strsql)
      EXEC(@strsql)
     END
     SET @l=@l+1
  END
 SET @d=@d+1
 SET @l=1
 END

SELECT * FROM dbo.Result
 DROP TABLE dbo.databases
 DROP TABLE dbo.login
 DROP TABLE dbo.users
 DROP TABLE dbo.Result

END

GO

转载于:https://www.cnblogs.com/Fly446854715/p/4125809.html

SQL Server AUTO_FIX_Login_Users相关推荐

  1. 【Sql Server】数据库的3大服务

    在数据库SQL SERVER中,处理常用的sql server数据库引擎,还有其他3大服务,分别是集成服务,报表服务,分析服务. 集成服务商可以配置包,这里的包可以理解是数据库引擎里的用户数据库.可以 ...

  2. 【Sql Server】DateBase-自动化

    强大的SQL Server有着神奇的自动化功能,来处理一些人为处理不了的事情! 自动化功能:T-sql语言,系统命令.脚本语言.复制命令.创建角色.索引重建.报表 管理元素:作业.警报.操作员.计划 ...

  3. 【Sql Server】DateBase-视频总结

    最近看完了数据库视频,内容繁杂,但也不是无迹可寻! 这是第三遍关于数据库的学习了,随着一遍一遍的深入,更加了解了它的全貌,虽然现在对于数据库还不能到达熟练操作的地步,但至少放我手上不在犯怵了. SQL ...

  4. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  5. 合肥工业大学—SQL Server数据库实验十:用户及其权限管理

    用户及其权限管理 1. 创建登录名Mylog及密码 2. 创建用户user2关联登录名 3. 创建角色role1 4. 对用户user2及角色role1授权 5. 验证用户授权 6. 收回用户权限 1 ...

  6. 合肥工业大学—SQL Server数据库实验四:数据库的分离和附加

    数据库的分离和附加 1. 数据库分离 2. 数据库附加 1. 数据库分离 当SQL Server服务器运行时,该服务器上所有的数据库自动处于运行状态,而运行中的数据库文件是无法进行数据库文件的拷贝的. ...

  7. SQL Server中Identity标识列

    SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便.但它有时还会带来一些麻烦. SQL Server中,经常会用到Identity标识列,这种自增长的字段 ...

  8. SQL SERVER 函数ROW_NUMBER() 应用

    应用场景: 1.业务要求SQL查询结果中输出含有"序号"."行号". 2.数据表中某个空白字段需要用流水号填充. 以上场景时,可以使用SQL SERVER 的函 ...

  9. java实体属性对应mysql和SQL Server 和Oracle 数据类型对应

    1:Java数据类型与MySql数据类型对照表 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 ...

  10. SQL Server Extended Events 进阶 3:使用Extended Events UI

    开始采用Extended Events 最大的阻碍之一是需要使用Xquery和XML知识用来分析数据.创建和运行会话可以用T-SQL完成,但是无论使用什么目标,数据都会被转换为XML.这个限制在SQL ...

最新文章

  1. 2021年春季学期-信号与系统-第三次作业参考答案-第二道题
  2. 蓝桥杯:基础练习 特殊的数字
  3. 无责任畅想:云原生中间件的下一站
  4. 电脑一复制粘贴就卡死_油门突然卡死,踩刹车根本没用该怎么办?看看老司机怎么说...
  5. 按图索骥:SQL中数据倾斜问题的处理思路与方法
  6. 拥有中国最深基坑的超高层建筑完成地下连续墙施工
  7. 计算机二进制编码原理,浅谈计算机信息的二进制编码
  8. 大厂面试 | 阿里巴巴大数据工程师面试题汇总
  9. PDF删除页面免费的方法有什么?PDF怎么删除页面的技巧你不能错过
  10. 程序员如何看待实力与运气
  11. 深信服邮件服务器配置,使用深信服设备实现邮件服务器高可用
  12. 微观结构到应用材料力学行为
  13. 买牛奶 (c++基础)
  14. 结合webpack 一步一步实现懒加载的国际化简易版方案
  15. 用matlab作乌鸦喝水,仿真程序动画作品--乌鸦喝水
  16. saas系统分几种类型
  17. Oracle入门到实战
  18. 计算机软件维护工程师工作总结,计算机维护工程师年终工作总结.docx
  19. 还记得当年的c-free和Borland c++5.5编译器吗?
  20. mysql 图标 太极_Android 画布 canvas 太极图

热门文章

  1. 大数据挑战与NoSQL数据库技术pdf
  2. 关于值传递和指针传递
  3. Eclipse 导入项目与 svn 插件关联全过程记录
  4. [CQOI2009][BZOJ1303] 中位数图
  5. 用条件注释判断浏览器版本,解决兼容问题
  6. Python核心编程--学习笔记--8--条件与循环
  7. Oracle Alert sid log 位置问题
  8. Java 异常处理 之 运行期异常
  9. 5秒钟搭建一个简单版的restful资源服务器
  10. Redis异常JedisConnectionException:Read timed out解决笔记