zoukankan      html  css  js  c++  java
  • 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<=@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


     

  • 相关阅读:
    语文作业
    在Windows下为PHP5.5安装redis扩展
    PHP安全处理之Mcrypt使用总结
    CSS3 动画
    微信开发--获取用户openID
    微信公众号开发--获取用户信息
    php 中gd库的安装
    随机输入几个数,输出重复的数字和重复的次数
    永久解决"Error:java: 错误: 不支持发行版本 12"的问题
    报"java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing"的原因和如何处理
  • 原文地址:https://www.cnblogs.com/Fly446854715/p/4125809.html
Copyright © 2011-2022 走看看