SQL Server AUTO_FIX_Login_Users

数据库搬迁时,太多的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<[email protected])
 BEGIN
  SELECT @databasename=name FROM dbo.databases WHERE [email protected]
  SET @strsql1 =‘USE ‘[email protected]+‘ ‘
  WHILE (@l<[email protected])
  BEGIN
     SELECT @login= name FROM dbo.login WHERE [email protected]
     EXEC(‘DELETE FROM dbo.users INSERT INTO dbo.users SELECT ‘‘1‘‘ as number,name FROM ‘[email protected]+‘.DBO.sysusers where islogin=‘‘1‘‘ AND name=‘‘‘[email protected]+‘‘‘ ‘)
     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‘‘,‘‘‘[email protected]+‘‘‘ ‘
      SET @strsql = @strsql + @strsql2
      PRINT(@strsql)
      EXEC(@strsql)
     END
     SET @[email protected]+1
  END
 SET @[email protected]+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

时间: 2024-08-29 10:35:51

SQL Server AUTO_FIX_Login_Users的相关文章

SQL Server 2008的MSSQLSERVER 请求失败或服务未及时响应

我的是SQL server 2008R2, 以前可以正常的启动SQL server(SQLEXPRESS).SQL server(MSSQLSERVER),有几天没有打开了,就在昨天 开机之后就无法启动MSSQLSERVER了,提示的信息如下图: 快速解决办法如下: 第一步:打开事件查看器,查看windows日志,点击应用程序,查看windows错误日志 http://product.pconline.com.cn/itbk/software/win8/1211/3060037.html 第二步

【Kettle】4、SQL SERVER到SQL SERVER数据转换抽取实例

1.系统版本信息 System:Windows旗舰版 Service Pack1 Kettle版本:6.1.0.1-196 JDK版本:1.8.0_72 2.连接数据库 本次实例连接数据库时使用全局变量. 2.1 创建新转换:spoon启动后,点击Ctrl+N创建新转换 2.2 在新转换界面中,右键点击DB连接,系统会弹出[数据库连接]界面. windows系统环境下,可用${}获取变量的内容. 说明: 连接名称:配置数据源使用名称.(必填) 主机名称:数据库主机IP地址,此处演示使用本地IP(

Bootstrap + AngularJS+ Ashx + SQL Server/MySQL

去年年底12月,为适应移动端浏览需求,花了1个月时间学习Bootstrap,并将公司ASP网站重构成ASP.NET. 当时采取的网站架构: Bootstrap + jQuery + Ashx + SQL Server 时间紧,没人带,只能硬着头皮,最后如期完成,但是也遗留了几个问题. 问题: 1.页面查询条件太复杂,太多的checkbox,jQuery操作DOM虽然方便,但是组合成json提交给后端还是比较麻烦,有没有天然支持json的前端框架或者脚本语言? html控件做的任何修改,都自动保存

numeric and int in sql server

类型映射 https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings C#关键字 decimal https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/decimal The decimal keyword indicates a 128-bit data type. Compa

Performance Monitor4:监控SQL Server的IO性能

SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Application创建IO请求,到Disk完成IO请求的时间延迟.如果物理Disk不能及时完成IO请求,跟不上请求负载的速度,那么SQL Server就容易出现性能问题.SQL Server内部在执行一些特定的操作时,会和Disk做读写交互,这也会影响物理硬盘响应SQL Server的IO请求的性能,使查询进程处

Performance Monitor3:监控SQL Server的内存压力

SQL Server 使用的资源受到操作系统的调度,同时,SQL Server在内部实现了一套调度算法,用于管理从操作系统获取的资源,主要是对内存和CPU资源的调度.一个好的数据库系统,必定在内存中缓存足够多的信息,以减少从物理硬盘中读取数据的次数:如果内存是系统瓶颈,那么SQL Server一定会运行的非常慢.监控SQL Server的内存压力,需要从Widnows级别上,对内存使用的整体使用情况进行监控:从SQL Server级别上,监控SQL Server对内存资源的使用情况. 一,从Wi

SQL SERVER DATETIME应用

PRINT '上周的第一天:'+CONVERT(NVARCHAR(20),DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE())-1, 0),120); PRINT '本周的第一天:'+CONVERT(NVARCHAR(20),DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0),120); PRINT '上月的第一天:'+CONVERT(NVARCHAR(20),DATEADD(MONTH, DATEDIFF(MONTH,

sql server 导入平面文件源数据,错误 0xc02020a1错误 0xc020902a 错误 0xc02020c5,返回状态值 4 和状态文本“文本被截断,或者一个或多个字符在目标代码页...

使用sql server 导入平面文件源数据时,报错:错误 0xc02020a1: 错误 0xc020902a: 错误 0xc02020c5:错误 0xc0047022: 返回状态值 4 和状态文本"文本被截断,或者一个或多个字符在目标代码页中没有匹配项. 错误 0xc02020a1: 数据流任务 1: 数据转换失败.列"列 6"的数据转换返回状态值 4 和状态文本"文本被截断,或者一个或多个字符在目标代码页中没有匹配项.". (SQL Server 导入

Centos 7.3下 Linux For SQL Server安装及配置介绍

Centos 7.3下Linux For SQL Server安装及配置介绍 说到SQL Server服务,我们大家都知道是Microsoft公司的数据库服务,当然说到数据库,现在主要分为三大商:1:Oracle.2:Msql Server.3:Mysql:三种数据库在当下环境受到不了不同程度的关注:比如oracle主要应用到大型的商业比较多,比如银行:SQL Server主要在常见的互联网公司使用:mysql主要应用于小型的企业或者服务商使用:当然从费用上来说,Oracle是最贵的,也是最为稳