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


     

  • 相关阅读:
    使用Python验证常见的50个正则表达式
    空气开关为何叫空气开关?它跟空气有何关系?
    YOLO 算法最全综述:从 YOLOv1 到 YOLOv5
    深入理解部分 SQL 语句执行慢的原因
    KNN(k-nearest-neighbor)算法
    聚类分析方法
    SQL Database学习笔记
    statistic学习笔记
    MapReduce中的排序
    weka打开提示内存不足的解决方法
  • 原文地址:https://www.cnblogs.com/Fly446854715/p/4125809.html
Copyright © 2011-2022 走看看