批量移植MSSQL2000帐号的方法

合集下载

MySQL中的批量操作与数据批量导入

MySQL中的批量操作与数据批量导入

MySQL中的批量操作与数据批量导入一、引言在开发和使用MySQL数据库时,经常会遇到需要对大量数据进行操作的场景。

如果每次都只能操作一条数据,效率将会非常低下。

为了提高效率,MySQL提供了批量操作和数据批量导入的功能。

本文将介绍MySQL中的批量操作和数据批量导入的方法和技巧。

二、批量操作1. 批量插入数据在MySQL中,可以使用INSERT语句插入数据。

如果需要插入多条数据,可以使用批量插入的方式,即一次性插入多条记录。

以下是一个示例:INSERT INTO table_name (column1, column2, column3)VALUES (value1, value2, value3),(value4, value5, value6),(value7, value8, value9);通过将多个数据值放在一个INSERT语句中,可以减少与数据库的通信次数,提高插入数据的效率。

2. 批量更新数据如果需要更新多条数据,可以使用批量更新的方式,即一次性更新多条记录。

以下是一个示例:UPDATE table_nameSET column1 = value1,column2 = value2,column3 = value3WHERE condition;通过将多个更新操作放在一个UPDATE语句中,可以减少与数据库的通信次数,提高更新数据的效率。

3. 批量删除数据如果需要删除多条数据,可以使用批量删除的方式,即一次性删除多条记录。

以下是一个示例:DELETE FROM table_nameWHERE condition;通过将多个删除操作放在一个DELETE语句中,可以减少与数据库的通信次数,提高删除数据的效率。

三、数据批量导入除了使用批量操作的方式对数据进行增、删、改操作外,还可以通过数据批量导入的方式将大量数据快速导入到MySQL数据库中。

以下是几种常用的数据批量导入方法。

1. 使用LOAD DATA INFILE语句MySQL提供了LOAD DATA INFILE语句,可以从一个文本文件中一次性导入大量数据到数据库表中。

MSSQL数据迁移方案

MSSQL数据迁移方案

数据迁移方案作者:xxx信息系统数据迁移需要考虑的因素很多,比如操作系统类别、数据库类型、版本、数据结构、数据规模、最小允许宕机时间等等。

对于本项目,假定满足下列条件:1、操作系统一致2、数据库类型一致,均为MS SQL Server3、数据库版本均为SQL 2000现存在两种数据迁移的考虑,第一种是新旧数据库系统采用相同数据结构存储,第二种是新旧数据库系统采用不同数据结构存储。

下面分别详细说明。

一、不同数据结构的数据升迁新系统建设完成后,需要对旧系统中数据进行升迁。

对于从旧系统中升迁历史数据,需要首先建立旧系统历史数据与新系统数据结构的对应关系,并根据对应关系建立数据逻辑视图。

然后使用导入导出工具将历史数据一次性导入到新系统中。

数据升迁工作需要遵循以下原则:1.数据项长度不一致的处理对于新系统与旧系统的数据项长度不一致的,为了防止数据丢失,应以数据项较长的为准。

2.代码标准不一致的处理对于新系统与旧系统的同一数据项,而代码标准不一致的,需要建立代码对照表交由用户审定后再进行升迁。

3.数据采集方式不一致的处理旧系统为代码输入项目,新系统为手工录入项目的,数据升迁时直接将含义升迁至新系统中。

旧系统为手工录入项目,新系统为代码输入项目的,数据升迁时应将数据导入临时表中,由用户确认这些数据的新代码后再导入正式库。

4.增减数据项目的处理新系统中新增的数据项目,如果为关键非空项,在数据升迁时需要由用户指定默认值或者数据生成算法。

旧系统有而新系统已取消的数据项目,原则上升迁至该记录的备注字段。

对于没有备注项目的,需要与用户协商是否需要继续保留。

5.历史数据归档的处理这种数据交换模式为大量、批量、一次性执行的工作。

此项工作要求需要支持异常终断后继续,并且在完成数据升迁后,需要出具数据升迁报告交由用户审核确认。

如果数据升迁工作顺利完成,原有一期系统数据在备份并刻录光盘后,将不再保留。

6.完成此项工作提交的文档:1)数据升迁报告2)新旧系统代码项对照关系备忘录3)新版系统中取消数据对象、数据项备忘录4)新版系统由于历史数据升迁工作要求数据结构修订备忘录5)历史数据清理工作备忘录6)旧系统历史数据刻录光盘二、数据结构相同的数据迁移对于数据结构相同的数据迁移,常见有两种方式:先备份再恢复的方式和数据库文件分离与附加的方式。

如何使用MySQL技术进行数据的批量处理与批量导入

如何使用MySQL技术进行数据的批量处理与批量导入

如何使用MySQL技术进行数据的批量处理与批量导入1. 引言在现代社会中,数据处理和数据导入对于许多企业和组织来说是非常重要的核心任务。

MySQL作为一种常用的关系数据库管理系统,提供了强大的功能和工具,使得批量处理和导入数据变得更加高效和方便。

本文将介绍如何使用MySQL技术进行数据的批量处理与批量导入,并探讨在实际应用中的一些技巧和经验。

2. 数据批量处理数据批量处理是指对大量数据进行统一的操作和处理。

MySQL提供了一些强大的功能和工具,可以帮助我们实现这一目标。

2.1 批量更新数据MySQL中,可以使用UPDATE语句来批量更新数据。

该语句可以通过WHERE子句指定需要更新的数据行,并使用SET子句指定更新的字段和值。

例如,对于一个名为users的表,我们可以使用以下语句批量更新所有年龄大于30的用户的职业为工程师:UPDATE users SET profession='工程师' WHERE age>30;2.2 批量删除数据类似于批量更新数据,MySQL中也可以使用DELETE语句来批量删除数据。

DELETE语句可以通过WHERE子句指定需要删除的数据行。

例如,我们可以使用以下语句批量删除名为users的表中所有年龄小于18的用户:DELETE FROM users WHERE age<18;2.3 批量插入数据MySQL中,可以使用INSERT语句批量插入数据。

一种常见的方法是使用INSERT INTO ... SELECT语句,将查询结果插入到目标表中。

例如,我们可以使用以下语句将名为temp_users的表中所有年龄大于18的用户插入到名为users的表中:INSERT INTO users (name, age) SELECT name, age FROM temp_users WHERE age>18;3. 数据批量导入除了对已有数据进行批量处理外,还有一种常见的需求是将外部数据批量导入到MySQL数据库中。

SQL Server数据库中批量导入数据的四种方法

SQL Server数据库中批量导入数据的四种方法

在SQL Server数据库中批量导入数据的四种方法,在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题。

其实,在SQL Server中集成了很多成批导入数据的方法。

有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟。

现在的重点就是,如何让用户了解这些方法,让数据导入变得轻松一些。

第一:使用Select Into语句若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入。

Select Into语句,他的作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中。

在使用这条语句的时候,需要注意几个方面的内容。

一是需要在目的数据库中先建立相关的表。

如想把进销存系统数据库(SQLServer)中的产品信息表(Product)导入到ERP系统中的产品信息表(M_Product)中。

则前期是在ERP系统的数据库中已经建立了这张产品信息表。

二是这种方法只复制表中的数据,而不复制表中的索引。

如在进销存系统数据中的产品信息表中,在产品编号、产品种类等字段上建立了索引。

则利用Select Into语句把数据复制到ERP系统的表中的时候,只是复制了数据内容的本身,而不会复制索引等信息。

三是这条语句使用具有局限性。

一般情况下,这只能够在SQL Server数据库中采用。

不过,对于SQL Server不同版本的数据库,如2008或者2003,还都是兼容的。

若需要导入的对象数据库不是SQL Server 的,则需要采用其他的方法。

四是采用这条语句的话,在目的表中必须不存在数据。

否则的话,目的表中的数据会被清除。

也就是说,这个语句不支持表与表数据的合并。

在SQL Server中,有一条类似的语句,可以实现这个功能。

这条语句就是:Insert Into。

他的作用就是把另外一张表中的数据插入到当前表中。

若用户想要的时表与表数据的合并,则可以采用这条语句。

SQL Server 2000 数据库迁移

SQL Server 2000 数据库迁移

SQL Server 2000 数据库迁移(数据库分离与附加)方法,重新安装操作系统时使用在下列场合下您可以使用本功能第一、如果您在恢复数据库的时候没有备份文件,而只有扩展名为MDF和LDF的两个数据库文件,那么您需要使用数据库附加功能能进行数据库的恢复。

第二、您在数据库初始化的时候没有选择数据库存放路径,而使用的系统默认路径,系统默认路径一般在C盘,由于C盘容易受病毒侵害,或者由于C盘磁盘空间不足,您也许希望您的数据存放在非系统盘(比如D盘),要做的这点也需要使用此方法。

第三、服务器搬迁,当您需要将天润档案管理系统服务器转移到另外一台电脑上的话,您也可以使用本功能。

数据库分离和附加其实很简单,您即使是初次接触数据库,做起来也很容易。

如果您是重新安装操作系统的话您只需使用数据库附加中能1、分离数据库1、点击“开始>程序>Microsoft SQL Server>企业管理”,打开企业管理器2、展开服务器组,然后展开服务器,选中要分离的数据库3、点击鼠标右键“所有任务>分离数据库”,出现如下窗口4、点击确定,该选定的数据库就被分离。

应注意,只有“使用本数据库的连接”数为0时,该数据库才能分离。

所以分离数据库时尽量断开所有对要分离数据库操作的连接,如果还有连接数据库的程序,会出现数据库的连接状态窗口,显示正在连接此数据库的机器以及名称,点击清除按钮将从服务器强制断开现有的连接。

2、附加数据库2.1复制移动数据库文件在附加数据库之前,您必须将与数据库关联的 .MDF(主数据文件).LDF(事务日志文件)这两个文件复制到目标服务器上,或是同一服务器的不同文件目录下。

这两个文件一般位于C:\ProgramFiles\Microsoft SQL Server\MSSQL\Data目录下。

2.2点击“开始>程序>Microsoft SQL Server>企业管理”,打开企业管理器2.3展开服务器组,然后展开服务器2.4右击"数据库",然后选择“所有任务>附加数据库”,弹出窗口2.5输入要附加的数据库的MDF名称。

SQL2000数据库导出和导入教程

SQL2000数据库导出和导入教程

SQL2000数据库导出和导入教程SQL Server 2000是一种关系型数据库管理系统,支持大型数据库和各种应用程序。

它提供了导出和导入数据的功能,使用户可以将数据从一个数据库导出到另一个数据库,或者从一个数据库导入到另一个数据库。

下面是SQL Server 2000数据库导出和导入的教程。

导出数据:1. 打开SQL Server 2000管理工具,选择要导出数据的数据库。

2.选择“任务”菜单,然后选择“导出数据”选项。

3.在“数据源”对话框中,选择要导出的表或视图。

您还可以指定一个查询来选择特定的数据。

4.在“目标”对话框中,选择将数据导出到的目标数据库或文件。

您可以选择导出到同一服务器上的另一个数据库,或者导出到一个文件。

5.确定导出选项,例如导出可变宽度的文本文件或固定宽度的文本文件,以及使用逗号作为字段分隔符或制表符作为字段分隔符。

6.单击“完成”按钮开始导出过程。

导入数据:1. 打开SQL Server 2000管理工具,选择要导入数据的数据库。

2.选择“任务”菜单,然后选择“导入数据”选项。

3.在“数据源”对话框中,选择包含要导入的数据的数据库或文件。

如果您选择一个文件,您需要指定文件类型和文件位置。

4.在“目标”对话框中,选择要导入数据的目标表或视图。

您还可以选择创建一个新的表来存储导入的数据。

5.如果需要的话,可以在“转换”对话框中进行必要的数据转换。

例如,您可以选择将一个日期字段的格式从YYYYMMDD转换为YYYY-MM-DD。

6.确定导入选项,例如是否忽略导入中的重复行,以及在导入过程中要使用的事务类型。

7.单击“完成”按钮开始导入过程。

导出和导入数据可能会花费一些时间,具体时间取决于数据的大小和服务器的性能。

在导出和导入过程中,您可以查看进度和错误信息。

除了使用SQL Server 2000管理工具进行导出和导入,还可以使用SQL命令进行导出和导入。

例如,您可以使用SELECT INTO语句将数据导出到一个新的表中,然后使用INSERT INTO语句将数据从一个表导入到另一个表中。

Microsoft Word - MS SQL Server 2000到DM的SQL移植.doc

Microsoft Word - MS SQL Server 2000到DM的SQL移植.doc

DM4技术资料MS SQL Server 2000到DM4的SQL移植武汉华工达梦数据库有限公司1. SQLServer2000到DM4的迁移概述DM4数据迁移工具JDTS支持SQLServer2000的数据表和视图的迁移,可以使用JDTS 自动完成数据表和视图的迁移工作;而存储过程和触发器的迁移则须把SQLServer2000的存储过程和触发器脚本导出,然后改写为符合DM4_SQL 语法的脚本,再在DM4的JManager 工具中执行改写后的脚本建立存储过程和触发器。

2.数据表的迁移2.1 SQLServer2000与DM4的数据类型的对应关系SQLServer2000数据类型 DM4数据类型Bigint Bigint(精度:19,标度:0)Int Int(精度:10,标度:0)Smallint Smallint(精度:5,标度:0)Tinyint Tinyint(精度:3,标度:0)Char Char(最大长度16000(页大小为32K时))Varchar Varchar(最大长度16000(页大小为32K时))Nchar CharNvarchar VarcharBinary Binary(定长二进制数据,缺省长度1,最大长度同CHAR)Varbinary Varbinary(可变长二进制数据,缺省长度1,最大长度同CHAR)Numeric Numeric(精度缺省值:16,标度缺省值:0,精度范围1~38)Decimal Decimal(精度缺省值:16,标度缺省值:0,精度范围1~38)Float Float(二进制精度最大:53,十进制精度最大:15)Real Real(二进制精度:24,十进制精度:7)Text Text(字符串的长度最大为2G-1)Ntext Text(默认长度长度为2G-1)Image Image(默认长度长度为2G-1)DatetimeTimestamp (SQL标准的Timestamp)Time (SQL标准的Time,HH:MM:SS)Date (SQL标准的Date,YYYY-MM-DD)Money Money(固定精度:19,标度:4)Smallmoney Money(固定精度:19,标度:4)Bit Bit(一个字节:整数1、0或NULL)2.2 迁移方法SQLServer2000数据表迁移采用DM4数据迁移工具JDTS,选择需要迁移的源表,JDTS 工具会自动把SQLServer的数据类型转换为对应的DM4数据类型,如果需要手动调整数据类型或约束关系,点“转换”在弹出窗口中改变数据类型和约束关系。

MSSQL登录名的迁移(无需修改密码)

MSSQL登录名的迁移(无需修改密码)

MSSQL登录名迁移分为三步,详细步骤见下:1.建立存储过程-可生成登录名的账号密码USEmasterGOIF OBJECT_ID('sp_hexadecimal')ISNOTNULLDROPPROCEDURE sp_hexadecimalGOCREATEPROCEDURE sp_hexadecimal@binvalue varbinary(256),@hexvalue varchar (514)OUTPUTASDECLARE @charvalue varchar (514)DECLARE @i intDECLARE @length intDECLARE @hexstring char(16)SELECT @charvalue ='0x'SELECT @i = 1SELECT @length =DATALENGTH(@binvalue)SELECT @hexstring ='0123456789ABCDEF'WHILE (@i <= @length)BEGINDECLARE @tempint intDECLARE @firstint intDECLARE @secondint intSELECT @tempint =CONVERT(int,SUBSTRING(@binvalue,@i,1)) SELECT @firstint =FLOOR(@tempint/16)SELECT @secondint = @tempint -(@firstint*16)SELECT @charvalue = @charvalue +SUBSTRING(@hexstring, @firstint+1, 1)+SUBSTRING(@hexstring, @secondint+1, 1)SELECT @i = @i + 1ENDSELECT @hexvalue = @charvalueGOIF OBJECT_ID('sp_help_revlogin')ISNOTNULLDROPPROCEDURE sp_help_revloginGOCREATEPROCEDURE sp_help_revlogin @login_name sysname=NULL AS DECLARE @name sysnameDECLARE @type varchar (1)DECLARE @hasaccess intDECLARE @denylogin intDECLARE @is_disabled intDECLARE @PWD_varbinary varbinary (256)DECLARE @PWD_string varchar (514)DECLARE @SID_varbinary varbinary (85)DECLARE @SID_string varchar (514)DECLARE @tmpstr varchar (1024)DECLARE @is_policy_checked varchar (3)DECLARE @is_expiration_checked varchar (3)DECLARE @defaultdb sysnameIF (@login_name ISNULL)DECLARE login_curs CURSORFORSELECT p.sid, , p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROMsys.server_principals p LEFTJOIN sys.syslogins lON ( = )WHERE p.type IN('S','G','U')AND <>'sa' ELSEDECLARE login_curs CURSORFORSELECT p.sid, , p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROMsys.server_principals p LEFTJOIN sys.syslogins lON ( = )WHERE p.type IN('S','G','U')AND =@login_name OPEN login_cursFETCHNEXTFROM login_curs INTO@SID_varbinary,@name,@type,@is_disabled, @defaultdb, @hasaccess, @denyloginIF (@@fetch_status=-1)BEGINPRINT'No login(s) found.'CLOSE login_cursDEALLOCATE login_cursRETURN-1ENDSET @tmpstr ='/* sp_help_revlogin script 'PRINT @tmpstrSET @tmpstr ='** Generated '+CONVERT(varchar,GETDATE())+' on'+@@SERVERNAME+' */'PRINT @tmpstrPRINT''WHILE (@@fetch_status<>-1)BEGINIF (@@fetch_status<>-2)BEGINPRINT''SET @tmpstr ='-- Login: '+ @namePRINT @tmpstrIF (@type IN('G','U'))BEGIN-- NT authenticated account/groupSET @tmpstr ='CREATE LOGIN '+QUOTENAME( @name )+' FROM WINDOWS WITH DEFAULT_DATABASE = ['+ @defaultdb +']'ENDELSEBEGIN-- SQL Server authentication-- obtain password and sidSET @PWD_varbinary=CAST(LOGINPROPERTY( @name,'PasswordHash')ASvarbinary (256))EXEC sp_hexadecimal@PWD_varbinary, @PWD_string OUTEXEC sp_hexadecimal@SID_varbinary,@SID_string OUT-- obtain password policy stateSELECT@is_policy_checked =CASE is_policy_checked WHEN1 THEN'ON'WHEN0 THEN'OFF'ELSE NULL ENDFROM sys.sql_logins WHERE name = @nameSELECT @is_expiration_checked =CASE is_expiration_checked WHEN 1 THEN'ON'WHEN0 THEN'OFF'ELSE NULL ENDFROM sys.sql_logins WHERE name =@nameSET @tmpstr ='CREATE LOGIN '+QUOTENAME( @name )+' WITH PASSWORD = '+@PWD_string +' HASHED, SID = '+ @SID_string +', DEFAULT_DATABASE = ['+ @defaultdb +']'IF ( @is_policy_checked ISNOTNULL)BEGINSET @tmpstr = @tmpstr +', CHECK_POLICY = '+ @is_policy_checkedENDIF ( @is_expiration_checked ISNOTNULL)BEGINSET @tmpstr = @tmpstr +', CHECK_EXPIRATION = '+ @is_expiration_checked ENDENDIF (@denylogin = 1)BEGIN-- login is denied accessSET @tmpstr = @tmpstr +'; DENY CONNECT SQL TO '+QUOTENAME( @name ) ENDELSEIF (@hasaccess = 0)BEGIN-- login exists but does not have accessSET @tmpstr = @tmpstr +'; REVOKE CONNECT SQL TO '+QUOTENAME( @name ) ENDIF (@is_disabled = 1)BEGIN-- login is disabledSET @tmpstr = @tmpstr +'; ALTER LOGIN '+QUOTENAME( @name )+' DISABLE' ENDPRINT @tmpstrENDFETCHNEXTFROM login_curs INTO@SID_varbinary,@name,@type,@is_disabled, @defaultdb, @hasaccess, @denyloginENDCLOSE login_cursDEALLOCATE login_cursRETURN 0GO2.执行1中生成的存储过程EXEC sp_help_revlogin运行完存储过程,会生成建立用户名的脚本如下:---结果如下:-- Login: NT SERVICE\MSSQLSERVERCREATELOGIN [NT SERVICE\MSSQLSERVER] FROMWINDOWSWITHDEFAULT_DATABASE= [master]-- Login: DC\qiaCREATELOGIN [DC\qigqa] FROMWINDOWSWITHDEFAULT_DATABASE= [master]-- Login: NT SERVICE\SQLSERVERAGENTCREATELOGIN [NT SERVICE\SQLSERVERAGENT]FROMWINDOWSWITHDEFAULT_DATABASE= [master]-- Login: DC\CNHAO$CREATELOGIN[DC\CNHAOZHAO8$] FROMWINDOWSWITHDEFAULT_DATABASE=[master]-- Login: adminCREATELOGIN [admin] WITHPASSWORD=0x0100C7EED5F4720C9918150AF4445F639974E7C7C81BEF93D70F HASHED,SID=0x1996A9B1268CA8478A8844FC21BD9A20,DEFAULT_DATABASE=[master],CHECK_POLICY=OFF,CHECK_EXPIRATION=OFF-- Login: testCREATELOGIN [test] WITHPASSWORD=0x0100F04C1695ED9FCA830A42F98BDE0430BF096E95AB940D437C HASHED,SID=0xE05B636253EF704DBAF198BD24C0EF85,DEFAULT_DATABASE=[master],CHECK_POLICY=OFF,CHECK_EXPIRATION=OFF3.建立登录名及赋予sysadmin角色运行2中的生成脚本,即可将账号和密码创建。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

批量移植MSSQL2000帐号的方法
在数据库的维护中最怵的就是移植数据库了,尤其是当数据库中有大量的分工详细的账户,笔者就曾遇到一个服务于web的MSSQL2000数据库系统,拥有超过200个登录帐号,与这些帐号相对应的是近百个数据库。

若按照通常移植MSSQL帐号的方法,不仅你要记住每一个帐号的名称、密码,而且你还要记住每个数据库中用户名与每个登录帐号的对应关系,我想这个创建帐号的过程一定会让你抓狂。

本文介绍了一种新的思路,即时是忘记了登录帐号密码的情况下也可以批量移植帐号。

先介绍一下本文中移植帐号的思路及适用范围:
1. 使用bcp将存储于源master数据库中的sysxlogins(存储登录帐号)系统表导出;
2. 将导出的文件复制到目标服务器上,再使用bcp将导出的文件导入到目标数据库中的过渡表中;
3. 开启系统表写入设置,将过渡表中账户数据导入到目的master数据库中的sysxlogi ns中;
4. 将新导入的帐号与数据库中的用户名作映射、对应。

本文中的方法适用于MSSQL2000,无法在MSSQL2005上操作,原因很简单,MSSQL 2005无法更改系统表,且其系统表的名称已经发生变化了。

--第1步是在源数据库中master库的sysxlogins系统表中将帐号信息导出成一个文件c: \logins.dat
exec master..xp_cmdshell 'bcp master..sysxlogins out c:\logins.dat -N -S"(l ocal)" -U"sa" -P"password"'
--第2步是将导出的文件导入到目标服务器中的master..logins过渡表中
if exists(select * from master..sysobjects where type='u' and name='login s')
drop table master..logins
go
--生成logins过渡表的空表结构
SELECT * INTO master..logins FROM master..sysxlogins WHERE 1=2
go
--将导出的帐号文件导入到logins表中
exec master..xp_cmdshell 'bcp master..logins in c:\logins.dat -N -S"(local)" -U"sa" -P"password"'
go
--第3步是将过渡表logins中的信息导入到sysxlogins系统表中
Use Master
go
--开启系统表写入设置
sp_configure 'allow updates', 1
reconfigure with override
go
set ansi_nulls off
go
--将logins过渡表中数据写入到sysxlogins系统表中
insert into
sysxlogins(
srvid,
sid,
xstatus,
xdate1,
xdate2,
name,
password,
dbid,
language)
select
srvid,
sid,
xstatus,
xdate1,
xdate2,
name,
password,
dbid,
language
from sysloginstemp
where name not in (select name from master..sysxlogins) go
set ansi_nulls on
go
Use Master
go
--关闭系统表写入设置
sp_configure 'allow updates', 0
reconfigure with override
go
--删除过渡表
drop table master..logins
--最后一步将数据库中的用户信息与login帐号做对应
/*
这一步主要是使用sp_change_users_login,将dbuser与loginuser映射
sp_change_users_login用来消除孤立用户使用方法:
sp_change_users_login 'Update_One', 'dbUser', 'LoginUser' --将用户dbUser 与帐号LoginUser映射
sp_Msforeachdb用来遍历DBMS下的每个数据库,并执行指定的sql语句。

这个存储过程是非公开的,其用法大家参考:
/features/mssql/article.php/3441031
*/
EXEC sp_MSforeachdb @command1=
/*
定义游标来遍历获取?数据库中的用户名(存放于sysusers)
及其所对应的MSSQL2000登录帐号(存放于syslogins)
*/
'declare user_cur cursor for
select dbname=,loginname=
from ?..sysusers u ,master..syslogins l
where u.sid=l.sid and l.sid<>0x01
declare @dbname varchar(255)
declare @loginname varchar(255)
declare @sql varchar(4000)
open user_cur
fetch next from user_cur into @dbname,@loginname
while @@fetch_status=0
begin
--将?数据库中的用户名与其对应的MSSQL2000帐号建立映射
select @sql=''?..sp_change_users_login ''''Update_One'''',''''''+@ dbname+'''''',''''''+@loginname+''''''''
exec (@sql)
fetch next from user_cur into @dbname,@loginname
end
--关闭游标
close user_cur
deallocate user_cur
'
总结:
本文在移植MSSQL2000账户时使用了一些非常规的方法,可以用来批量移植帐号,降低了移植过程的繁琐程度,虽修改系统表的方法是不值得推荐的,但其中使用的sp_Ms foreachdb、sp_change_users_login方法及思路还是值得大家借鉴的。

相关文档
最新文档