我正在从备份文件创建一个数据库(我将这个称为db 1),我需要将一个数据库(和这个数据库2)的用户复制到新恢复的数据库中。
我必须完成的第一步是删除新恢复的数据库中的所有现有用户。
然后将用户从db 2复制到db 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
如果它不是同一台服务器,那么您需要生成更多脚本,但仍然可以完成。