如何将所有数据库用户从一个数据库复制到另一个数

时间:2015-06-17 14:50:51

标签: sql sql-server database

我正在从备份文件创建一个数据库(我将这个称为db 1),我需要将一个数据库(和这个数据库2)的用户复制到新恢复的数据库中。

我必须完成的第一步是删除新恢复的数据库中的所有现有用户。

然后将用户从db 2复制到db 1的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

你不能只使用INSERT .... SELECT构造。

您需要使用sys.users信息生成CREATE USER语句并执行这些语句。

如果这是一次性的话,我会用

select 'CREATE USER [' + uu.name + '] FOR LOGIN ' + ll.name + ' ;'
from sys.sysusers uu
    join master.sys.syslogins ll on ll.sid = uu.sid 

然后捕获输出,将输出粘贴到批处理中并运行该批处理 - 一次性快速简便。

如果您需要以自动方式执行此操作,可以使用光标:

USE DB2 -- the source of the users
DECLARE cursCol CURSOR FAST_FORWARD FOR 
  select 'CREATE USER [' + uu.name + '] FOR LOGIN ' + ll.name + ' ;'
from sys.sysusers uu
    join master.sys.syslogins ll on ll.sid = uu.sid 

DECLARE @cmdString varchar(max) --for storing the first half of INSERT statement
OPEN cursCol
USE DB1 -- the target of the created users
FETCH NEXT FROM cursCol INTO @cmdString;
WHILE @@FETCH_STATUS=0 BEGIN
   PRINT @cmdString;
   EXEC (@cmdString);

   FETCH NEXT FROM cursCol INTO @cmdString;
END
CLOSE cursCol
DEALLOCATE cursCol

如果它不是同一台服务器,那么您需要生成更多脚本,但仍然可以完成。